使用AsyncTask在android中创建JSoup类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用AsyncTask在android中创建JSoup类相关的知识,希望对你有一定的参考价值。
我知道我必须使用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 + "
");
}
哪个不行。我很清楚,它不应该起作用,有些东西我不知道,但我希望你们能指出我正确的方向。
答案
解:
可能不是最好的,但它确实有效
我已经添加了这个toHTMLParser
类
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)
按预期工作
以上是关于使用AsyncTask在android中创建JSoup类的主要内容,如果未能解决你的问题,请参考以下文章
别再傻傻得认为AsyncTask只可以在主线程中创建实例和调用execute方法
在 AsyncTask doInBackground 中创建 140,000 行 SQLite 数据库需要很多很多分钟
即使在使用 AsyncTask 之后,编舞者也会跳帧(最多 400 个!)