使用 Jsoup 解析多个页面 HTML Android
Parse multiple Pages HTML using Jsoup for Android
我正在使用 AsyncTask 为 Android 使用 Jsoup 解析 html。
我用了很长时间,但今天我在解析与 RecyclerView 适配器相关的多个页面时遇到问题,具体为:https://www.hi.com?page=1 ; and https://www.hi.com?page=2,...
页数不小,大于100。
我如何解析所有这些但必须适应 AsyncTask 的性质,它就像一个队列,等待一个直到它完成并开始一个新的。
我尝试使用 for for (int i=1;i<=countPage;i++) { //do new AsyncTask with new String that String change by the last word present by count ( ...?page=" + String.valueOf(countPage)... }
但它不起作用。
我试过 Thread ,在里面设置 AsynTask 直到 getStatus=AsyncTask.Status==Done 和新的 Parse,但直到不起作用。
我尝试使用 ThreadPool,但直到无法正常工作。我不知道如何解决这个问题。
我不想列出页面的所有 100 个链接...
有人能帮我吗?非常感谢。祝你有个愉快的一天。
要同时执行一个 AsyncTask
多次,您必须使用带有执行器的变体 和 创建多个实例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (String param : new String[] {"foo", "bar", "baz"}) {
new SomeTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, param);
}
}
static class SomeTask extends AsyncTask<String, Long, String> {
@Override
protected String doInBackground(String... params) {
// do your background processing
return null;
}
}
}
就我个人而言,我更喜欢 RxJava。使用起来更愉快。 RxJava 中的等效代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable.just("foo", "bar", "baz")
.map(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
// Background processing
return null;
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// display result
}
});
}
}
我正在使用 AsyncTask 为 Android 使用 Jsoup 解析 html。
我用了很长时间,但今天我在解析与 RecyclerView 适配器相关的多个页面时遇到问题,具体为:https://www.hi.com?page=1 ; and https://www.hi.com?page=2,...
页数不小,大于100。
我如何解析所有这些但必须适应 AsyncTask 的性质,它就像一个队列,等待一个直到它完成并开始一个新的。
我尝试使用 for for (int i=1;i<=countPage;i++) { //do new AsyncTask with new String that String change by the last word present by count ( ...?page=" + String.valueOf(countPage)... }
但它不起作用。
我试过 Thread ,在里面设置 AsynTask 直到 getStatus=AsyncTask.Status==Done 和新的 Parse,但直到不起作用。
我尝试使用 ThreadPool,但直到无法正常工作。我不知道如何解决这个问题。
我不想列出页面的所有 100 个链接...
有人能帮我吗?非常感谢。祝你有个愉快的一天。
要同时执行一个 AsyncTask
多次,您必须使用带有执行器的变体 和 创建多个实例:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
for (String param : new String[] {"foo", "bar", "baz"}) {
new SomeTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, param);
}
}
static class SomeTask extends AsyncTask<String, Long, String> {
@Override
protected String doInBackground(String... params) {
// do your background processing
return null;
}
}
}
就我个人而言,我更喜欢 RxJava。使用起来更愉快。 RxJava 中的等效代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable.just("foo", "bar", "baz")
.map(new Function<String, String>() {
@Override
public String apply(String s) throws Exception {
// Background processing
return null;
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// display result
}
});
}
}