我在android工作。
我的MainActivity.java中有一个扩展AsyncTask的ParseURL类:
该类解析URL,然后对其进行一些操作。
private class ParseURL extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
StringBuffer buffer = new StringBuffer();
Document doc;
try {
Log.i("output", "trying to connect..");
doc = Jsoup.connect("http://sirim.co.il/").get();
Log.i("output", "connected");
Elements metaElems = doc.select("a[class=mainlevelmatkonim]");
for (Element metaElem : metaElems) {
String c = metaElem.text();
buffer.append(c + "\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buffer.toString();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
httpInfo.setText(s);
}
}
我的问题是 - 如果我想再次使用AsyncTask来解析另一个页面 - 但是对解析后的页面执行不同的操作 -
我应该使用同一个课程还是创建一个新课程?
正确的方法是什么?有一个&#34; if&#34;声明或类似的东西来检查如何处理解析的页面?或者有几个不同的AsyncTask类?
提前th ,, 地平线答案 0 :(得分:1)
为您的任务使用参数:
private class ParseURL extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... url) {
StringBuffer buffer = new StringBuffer();
Document doc;
try {
Log.i("output", "trying to connect..");
doc = Jsoup.connect(url[0]).get();
Log.i("output", "connected");
Elements metaElems = doc.select("a[class=mainlevelmatkonim]");
for (Element metaElem : metaElems) {
String c = metaElem.text();
buffer.append(c + "\r\n");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return buffer.toString();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
httpInfo.setText(s);
}
}
像这样使用:
ParseURL task = new ParseURL();
task.execute("http://sirim.co.il/");
但您必须重新创建任务everytime you have to use it again
该任务只能执行一次(如果尝试第二次执行,则会抛出异常。)
您可以在ParseURL
private class ParseURL extends AsyncTask<String, Void, String> {
public static void parse(String url)
{
ParseURL task = new ParseURL();
task.execute(url);
return task;
}
// [...]
并像这样使用它:
ParseURL task = ParseURL.parse("http://sirim.co.il/");
关于不同的行动
您可以调整OnPostExecute方法,并使用枚举在操作之间切换
private class ParseURL extends AsyncTask<String, Void, String> {
public enum ParseURLAction {ACTION1, ACTION2, ACTION3};
public static void parse(String url, ParseURLAction action)
{
ParseURL task = new ParseURL(action);
task.execute(url);
return task;
}
private ParseURLAction action;
public ParseURL(ParseURLAction action)
{
this.action = action;
}
// [...]
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
switch (action)
{
case ACTION1:
// TODO something
break;
// [...]
}
用法:
ParseURL task = ParseURL.parse("http://sirim.co.il/", ParseURL.ParseURLAction.ACTION1);
答案 1 :(得分:0)
将另一个参数传递给doinbackground函数,该函数指示你的url。基于该参数编写你的行为。
答案 2 :(得分:0)
在执行命令中,您可以使用异步任务传递尽可能多的参数。
ParseURL task = new ParseURL();
task.execute(parameter1, parameter2, parameter3);
@Override
protected String doInBackground(String... strings) {
if(strings[0]== your condition){
// do this
}
if(strings[1]== your condition){
// do this
}
if(strings[2]== your condition){
// do this
}
}