在Android上重新启动应用程序之前,线程不会启动

时间:2013-07-15 04:46:43

标签: java android eclipse multithreading jsoup

我正在尝试从网站获取HTML数据,现在只需将textview更改为网页标题即可。出于某种原因,每当我退出应用程序并重新打开它时,此textview仅显示标题。我猜这是由于线程和我不知道的事情。例如,这是我的stackoverflow.com网站的代码:

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,然后重新打开它。这是为什么?

2 个答案:

答案 0 :(得分: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线程中运行代码的几种方法之一。

答案 1 :(得分: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会获取您的网页名称。