繁体   English   中英

使用AsyncTask在android中创建JSoup类

[英]Creating a JSoup class in android using AsyncTask

我知道我必须使用ASyncTasks才能使JSoup适用于android,但是在线上的所有示例都说明了这一点,只需在MainActivity使用随机的jsoup方法即可。

我想创建一个HTMLParser类,该类将为要解析的每个元素包含一个函数,但似乎无法使其正常工作。

我的HTMLParser

public class HTMLParser extends AsyncTask<Void, Void, Void> {
private Document doc;


@Override
protected Void doInBackground(Void... voids) {
    try {
        doc = Jsoup.connect("https://www.bodybuilding.com/exercises").get();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}



public ArrayList<String> findMuscleGroups(){
    ArrayList<String> muscleGroups = new ArrayList<>();
    Elements section = doc.select("a");
    if (section != null) {
        for (Element exercise : section) {
            if (exercise.hasText() && !muscleGroups.contains(exercise.text()) &&
                    exercise.attr("href").contains("exercises/muscle")) {
                muscleGroups.add(exercise.text());
            }
        }
    }
    return muscleGroups;
}


}

在我的MainActivity我希望能够创建HTMLParser对象,并能够使用类似ArrayList = htmlParser.findMuscleGroups()

我的MainActivity

HTMLParser parser = new HTMLParser();
new HTMLParser().execute();
for (String muscleGroup : parser.findMuscleGroups()){
    textView.setText(muscleGroup + "\n");
}

哪个行不通。 我很清楚,它不应该起作用,我缺少一些东西,但我希望你们能为我指明正确的方向。

解:

可能不是最好的,但是它可以工作,因此

我已将此添加到HTMLParser

public Document initializeDoc(){
    try {
        Document doc = Jsoup.connect("https://www.bodybuilding.com/exercises").get();
        return doc;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }

}

MainActivity我创建了

private volatile Document doc = null;
private volatile HTMLParser htmlParser;

变量,并在onCreate方法中添加了以下内容

    htmlParser = new HTMLParser();
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            doc = htmlParser.initializeDoc();
        }
    });
    try {
        t.start();
        t.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

不用说,调用htmlParser.findMuscleGroups(doc)可以按预期工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM