2013-07-15 62 views
0

我想从网站获取html数据,现在我只是简单地将textview更改为网页标题。出于某种原因,此文本视图只在我退出应用程序并重新打开时显示标题。我猜这是由于线程和我不知道的东西。作为一个例子,这里是我的stackoverflow.com网站代码:线程不启动,直到应用程序在Android上重新启动

public void onResume() { 
    super.onResume(); 

    Thread downloadThread = new Thread() { 
     public void run() { 
      Document doc; 
      try { 
       doc = Jsoup.connect("http://www.stackoverflow.com").get(); 
       titlestring = doc.title(); 

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

    TextView maintext = (TextView) findViewById(R.id.maintext); 

    Log.i("wbbug", "Title string: " + titlestring); 
    maintext.setText(titlestring); 

} 

出于某种原因,它不显示网页的标题,直到我启动应用程序,按home,然后重新打开它。为什么是这样?

+0

检查活动的生命周期。 http://developer.android.com/training/basics/activity-lifecycle/index.html – Raghunandan

回答

1

试试这个:

TextView maintext = (TextView) findViewById(R.id.maintext); 
Thread downloadThread = new Thread() { 
     public void run() { 
      Document doc; 
      try { 
       doc = Jsoup.connect("http://www.stackoverflow.com").get(); 
       titlestring = doc.title(); 

      runOnUiThread(new Runnable() 
        { 
         run(){ 
        Log.i("wbbug", "Title string: " + titlestring); 
        maintext.setText(titlestring); 
          } 
        } 

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

maintext.setText()调用你会得到你的页面的标题之前,但在第二次titlestring已经与你的价值发起并setText得到您的页面名称。

1

您正在加载网页后台线程(这是很好),没有等待HTTP请求完成,您采取titlestring并假定它包含网页的标题,但情况永远不会如此。

试试这个:

TextView maintext = (TextView)findViewById(R.id.maintext); 
Thread downloadThread = new Thread() {       
    public void run() {           
     Document doc;           
     try {            
      final Document doc = Jsoup.connect("http://www.stackoverflow.com").get(); 
      maintext.post(new Runnable(){ 
       maintext.setText(doc.title()); 
      }); 
     } catch (IOException e) {      
      e.printStackTrace();       
     }              
    }             
};              
downloadThread.start(); 

为TextView的文本设置你得到文档后。注意setText()在UI组件上运行,因此您必须在UI线程中执行maintext.setText()View.post()是在UI线程中运行代码的几种方法之一。

相关问题