簡體   English   中英

如何使用類名獲取HTML內容?

[英]How to get HTML content using class name?

我正在嘗試創建一個類,該類使用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);

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

您似乎誤會了線程的工作方式。 Jsoup發生在后台。 同時,您將繼續在主線程中設置文本,但不能保證該文本

您需要將異步任務移到活動中。

並且您需要為其實現onPostExecute,在其中您將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是錯誤的庫。 雖然不確定本地新聞網站是否先進

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM