我正在尝试从网站获取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,然后重新打开它。这是为什么?
答案 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
会获取您的网页名称。