Android-将额外参数传递给AsyncTask
我对一项任务有异议,希望有人能给我一些建议。我正在执行异步任务以从internet获取数据。这项任务在一个单独的班级里。我有多个异步任务,它们执行完全相同的操作,但它们在不同的时刻被调用,并将数据传递回不同的方法。在当前AsyncTask中,我可以导出它并将一个或多个url作为参数 我的问题是:有没有一种方法可以向AsyncTask发送一个额外的参数,这样我就可以在onPostExecute中使用一个开关案例来决定webdata应该放在哪里 这是AsyncTask类之一:Android-将额外参数传递给AsyncTask,android,parameters,android-asynctask,Android,Parameters,Android Asynctask,我对一项任务有异议,希望有人能给我一些建议。我正在执行异步任务以从internet获取数据。这项任务在一个单独的班级里。我有多个异步任务,它们执行完全相同的操作,但它们在不同的时刻被调用,并将数据传递回不同的方法。在当前AsyncTask中,我可以导出它并将一个或多个url作为参数 我的问题是:有没有一种方法可以向AsyncTask发送一个额外的参数,这样我就可以在onPostExecute中使用一个开关案例来决定webdata应该放在哪里 这是AsyncTask类之一: import java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import android.os.AsyncTask;
import android.util.Log;
public class GetContactpersoonFromWeb extends AsyncTask<String, Void, String> {
String result = "";
String webData;
FirstScreen activity;
public GetContactpersoonFromWeb(FirstScreen activity)
{
this.activity = activity;
}
protected String doInBackground(String... urls) {
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(urls[0]);
HttpResponse response;
try {
response = httpClient.execute(httpGet, localContext);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = null; //vanaf niks beginnen
while ((line = reader.readLine()) != null) {
result += line + "\n";
}
this.webData = result;
}
catch (Exception e) {
Log.d("info","error bij het ophalen van de data", e);
}
return this.webData;
}
protected void onPostExecute(String result) {
this.webData = result;
activity.getContactpersoonData(webData);
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.protocol.BasicHttpContext;
导入org.apache.http.protocol.HttpContext;
导入android.os.AsyncTask;
导入android.util.Log;
公共类GetContactpersoonFromWeb扩展异步任务{
字符串结果=”;
字符串webData;
第一屏活动;
公共GetContactpersoonFromWeb(第一屏活动)
{
这个。活动=活动;
}
受保护的字符串doInBackground(字符串…URL){
HttpClient HttpClient=新的DefaultHttpClient();
HttpContext localContext=新的BasicHttpContext();
HttpGet HttpGet=新的HttpGet(URL[0]);
HttpResponse响应;
试一试{
response=httpClient.execute(httpGet,localContext);
BufferedReader=new BufferedReader(new InputStreamReader(response.getEntity().getContent());
String line=null;//vanaf niks beginnen
而((line=reader.readLine())!=null){
结果+=行+“\n”;
}
this.webData=结果;
}
捕获(例外e){
Log.d(“信息”,“数据错误”,e);
}
返回此.webData;
}
受保护的void onPostExecute(字符串结果){
this.webData=结果;
activity.getContactpersoonData(webData);
}
}
与其他异步任务的区别在于最后一条规则:activity.getFabricData(webData)代码>
在另一个类中是:activity.getMachineData(webData)代码>等
有人知道如何通过只使用一个类来实现这一点吗?我认为使用7个类,只有1条差异规则不是最好的方法
提前谢谢 添加在构造函数中执行开关的日期
public GetContactpersoonFromWeb(FirstScreen activity,int yourExtraData)
{
this.activity = activity;
mExtraData = extraData;
}
然后在onPostExecute
中使用mExtraData
添加在构造函数中执行切换的日期
public GetContactpersoonFromWeb(FirstScreen activity,int yourExtraData)
{
this.activity = activity;
mExtraData = extraData;
}
然后在onPostExecute
中使用mExtraData
添加在构造函数中执行切换的日期
public GetContactpersoonFromWeb(FirstScreen activity,int yourExtraData)
{
this.activity = activity;
mExtraData = extraData;
}
然后在onPostExecute
中使用mExtraData
添加在构造函数中执行切换的日期
public GetContactpersoonFromWeb(FirstScreen activity,int yourExtraData)
{
this.activity = activity;
mExtraData = extraData;
}
然后在onPostExecute
中使用mExtraData
,您需要在AsyncTask
中创建一个额外的变量,并在构造函数中添加额外的参数,如
public GetContactpersoonFromWeb(FirstScreen activity,int extra)
{
}
然后,您可以在开关情况下使用此值,如
switch(extra){`
................
.................
您需要在AsyncTask
中创建一个额外的变量,并在构造函数中添加额外的参数,如
public GetContactpersoonFromWeb(FirstScreen activity,int extra)
{
}
然后,您可以在开关情况下使用此值,如
switch(extra){`
................
.................
您需要在AsyncTask
中创建一个额外的变量,并在构造函数中添加额外的参数,如
public GetContactpersoonFromWeb(FirstScreen activity,int extra)
{
}
然后,您可以在开关情况下使用此值,如
switch(extra){`
................
.................
您需要在AsyncTask
中创建一个额外的变量,并在构造函数中添加额外的参数,如
public GetContactpersoonFromWeb(FirstScreen activity,int extra)
{
}
然后,您可以在开关情况下使用此值,如
switch(extra){`
................
.................
失眠症患者的回答会很好,但还有另一个选择。如果在创建AsyncTask
之前知道数据需要去哪里,那么不同的onPostExecute()
行为的另一个选项是使用多态性,而不是开关。这允许您在将来添加另一种类型的行为,而不会有破坏现有代码的风险。这里解释了该技术:
在您的例子中,您需要将代码从GetContactpersoonFromWeb
移动到一个抽象基类,比如说,GetFromWeb
,然后让GetContactpersoonFromWeb
从GetFromWeb
继承并重写onPostExecute()
。重复<代码>编造数据< /代码>和代码>机器版 . @失眠症患者的答案会很好,但还有另一个选择要考虑。如果在创建
AsyncTask
之前知道数据需要去哪里,那么不同的onPostExecute()
行为的另一个选项是使用多态性,而不是开关。这允许您在将来添加另一种类型的行为,而不会有破坏现有代码的风险。这里解释了该技术:
在您的例子中,您需要将代码从GetContactpersoonFromWeb
移动到一个抽象基类,比如说,GetFromWeb
,然后让GetContactpersoonFromWeb
从GetFromWeb
继承并重写onPostExecute()
。重复<代码>编造数据< /代码>和代码>机器版 . @失眠症患者的答案会很好,但还有另一个选择要考虑。如果在创建
AsyncTask
之前知道数据需要去哪里,那么不同的onPostExecute()
行为的另一个选项是使用多态性,而不是开关。这允许您在将来添加另一种类型的行为,而不会有破坏现有代码的风险。这项技术是可以解释的