仿知乎日报App

1、6.Error:Execution failed for task ':app:buildInfoDebugLoader'.
> Exception while doing past iteration backup : Source G:project***appuildintermediatesuildsdebug37215488613481classes.dex and destination G:project***appuildintermediatesuildsdebug37215488613481classes.dex must be different

这种问题不知道怎么出现的,clean一下即可。

2、Imageview加载网络图片,要用Handler。

3、ImageView设置图片的比例问题。http://blog.csdn.net/hhbgk/article/details/8101676

4、取消标题栏,只要设置一下Theme即可。

第一步是爬取相关的文章标题,图片,以及地址。

用的是普通的java写的,还有用了htmlunit的库比较方便,为什么要这样,还得学下css

源网址:http://daily.zhihu.com

出来的效果大概是这样

代码:

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomNode;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlImage;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class main {
    
    public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException{
        
        
        
         String url = "http://daily.zhihu.com";
        
         WebClient webClient = new WebClient(BrowserVersion.CHROME);
         
         //把警告弄掉的
         webClient.getOptions().setJavaScriptEnabled(false);

         webClient.getOptions().setCssEnabled(false);
         
         HtmlPage page = webClient.getPage(url);
         
        //System.out.println(page.asXml());
         
         //DomNode content = page.querySelector(".main-wrap.content-wrap");
         //System.out.println(content.asXml());
         
         
         
         
         //找到所有wrap的类
         DomNodeList<DomNode> iList = page.querySelectorAll(".wrap");
         
         for(DomNode i: iList){
             
                 HtmlAnchor a = (HtmlAnchor)i.querySelector("a");
                 HtmlImage img = (HtmlImage)i.querySelector("img");

                // 获取 a 标签的属性 href ,就是帖子详情的地址啦!!
                String href = a.getAttribute("href");
                String src = img.getAttribute("src");
                String title = i.asText();
             
             
                System.out.println(title);
                System.out.println(href);
                System.out.println(src);
             
             
         }//end for
        
    }

}

第二步:怎么处理获得的数据?

就是UI的问题,这个暂时没有设计好- -

就是网上的图片获取之后弄成bitmap,然后在handleMessage里面设置到ImageView里面

还有就是涉及网络的任务必须新开一个线程,不能在主线程执行

代码:

public class MainActivity extends AppCompatActivity {

    WebView webView;
    ImageView imageView;
    Bitmap bitmap;

    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        handler = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                Log.d("TAG","getMessage");

                imageView.setImageBitmap(bitmap);

            }
        };

        /*
        webView = (WebView)findViewById(R.id.webView);

        webView.loadUrl("http://daily.zhihu.com/story/8746558");
        */

        imageView = (ImageView)findViewById(R.id.imageview1);



        new Thread(new Runnable() {
            @Override
            public void run() {

                try {
                    getImageViewInputStream();

                } catch (IOException e) {
                    e.printStackTrace();
                }

                    Message message = new Message();
                    handler.sendMessage(message);



            }
        }).start();




        }

    public void getImageViewInputStream() throws IOException {
                InputStream inputStream = null;
                 URL url = new URL("http://pic1.zhimg.com/96b31814276e24e991064920567ed9e4.jpg");                    //服务器地址
                 if (url != null) {
                         //打开连接
                         HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                         //httpURLConnection.setConnectTimeout(3000);//设置网络连接超时的时间为3秒
                         httpURLConnection.setRequestMethod("GET");        //设置请求方法为GET
                         httpURLConnection.setDoInput(true);                //打开输入流
                         httpURLConnection.connect();
                     int responseCode = httpURLConnection.getResponseCode();    // 获取服务器响应值
                         if (responseCode == HttpURLConnection.HTTP_OK) {        //正常连接
                                 inputStream = httpURLConnection.getInputStream();        //获取输入流
                                 bitmap = BitmapFactory.decodeStream(inputStream);
                                inputStream.close();
                             Log.d("TAG","getOK");
                             }


                     }

             }

}

第三步:怎么处理文章?

当时还在纠结一堆html格式的怎么解析,后来想到可以用WebView偷懒。直接把文章的网址放在WebView里面就好了

原文地址:https://www.cnblogs.com/wzben/p/5853660.html