1. 程式人生 > >繼上篇部落格對安卓爬蟲以及TextView更新的問題解釋

繼上篇部落格對安卓爬蟲以及TextView更新的問題解釋

只能在主執行緒更新ui,或者用handler傳輸。爬蟲是在另一個非同步執行緒進行,所以爬出來的資料對控制元件賦值就比較麻煩。這次使用了執行緒資料傳到runnable將資料傳到handler進行賦值。

 

結果圖:

原始碼:

  String word="軟體工程";
    // textView.setText(content.text().toString());//將爬取到的內容給另一個頁面賦值
    class MyRunnable implements Runnable {
        @Override
        public void run() {
        try{
            Document doc = (Document) Jsoup.connect("https://baike.baidu.com/item/"+word).get();
            Element content = doc.select("div.para").first();
            //  String title = doc.title();
            //String title = doc.title();
            con=content.text().toString();
            Message message=new Message();
            message.obj=con;

        }catch(java.io.IOException e) {
            e.printStackTrace();
        }
            // TODO Auto-generated method stub
            System.out.println("馬佳慧"+con);
            Message msg = new Message();
            Bundle bundle = new Bundle();
            bundle.putString("name", con);
            msg.setData(bundle);
            handler.sendMessage(msg);
        }

        Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                TextView  textView = ( TextView) findViewById(R.id.textView1);
                Bundle b = new Bundle();
                b = msg.getData();
                System.out.println(b.get("name")+"測試資料");
                textView.setText(b.get("name").toString());
            }
        };
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);
        new Thread(new MyRunnable()).start();
    }