我正在尝试创建一个使用jsoup库来创建网站元素对象的类。
阅读完文档后,我就是这样:
public class storyObj {
public String title;
public String preview;
public String date;
String url = "http//:davisclipper.com";
Bitmap bitmap;
private class Title extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
title = storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
public String getTitle(){
return title;
}
在我的主要活动中,我设置了一个TextView来获取返回的标题:
storyObj story = new storyObj();
String text = story.getTitle();
TextView title = (TextView) findViewById(R.id.main_title);
title.setText(text);
我得到的只是一个空字符串。
答案 0 :(得分:1)
您似乎误解了线程如何工作。 Jsoup发生在后台。与此同时,您将继续主线程并设置文本,但您无法保证
您需要将异步任务移动到活动中。
您需要为title.setText(text);
您还需要制作doInBackground return title
喜欢这样
this.title = (TextView) findViewById(R.id.main_title);
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
Document doc = Jsoup.connect(url).get();
Elements storyTitle = doc.getElementsByClass("story_item_title");
return storyTitle.attr("content");
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String content) {
MainActivity.this.title.setText(content);
}
}.execute();
除非这个网站是由Javascript动态生成的,否则Jsoup是错误的库。不确定本地新闻网站是否具有先进性,但