如何使用类名获取HTML内容?

时间:2017-12-16 00:35:44

标签: java android jsoup

我正在尝试创建一个使用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);

我得到的只是一个空字符串。

1 个答案:

答案 0 :(得分:1)

您似乎误解了线程如何工作。 Jsoup发生在后台。与此同时,您将继续主线程并设置文本,但您无法保证

您需要将异步任务移动到活动中。

您需要为title.setText(text);

实现onPostExecute

您还需要制作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是错误的库。不确定本地新闻网站是否具有先进性,但