Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-将额外参数传递给AsyncTask_Android_Parameters_Android Asynctask - Fatal编程技术网

Android-将额外参数传递给AsyncTask

Android-将额外参数传递给AsyncTask,android,parameters,android-asynctask,Android,Parameters,Android Asynctask,我对一项任务有异议,希望有人能给我一些建议。我正在执行异步任务以从internet获取数据。这项任务在一个单独的班级里。我有多个异步任务,它们执行完全相同的操作,但它们在不同的时刻被调用,并将数据传递回不同的方法。在当前AsyncTask中,我可以导出它并将一个或多个url作为参数 我的问题是:有没有一种方法可以向AsyncTask发送一个额外的参数,这样我就可以在onPostExecute中使用一个开关案例来决定webdata应该放在哪里 这是AsyncTask类之一: import java

我对一项任务有异议,希望有人能给我一些建议。我正在执行异步任务以从internet获取数据。这项任务在一个单独的班级里。我有多个异步任务,它们执行完全相同的操作,但它们在不同的时刻被调用,并将数据传递回不同的方法。在当前AsyncTask中,我可以导出它并将一个或多个url作为参数

我的问题是:有没有一种方法可以向AsyncTask发送一个额外的参数,这样我就可以在onPostExecute中使用一个开关案例来决定webdata应该放在哪里

这是AsyncTask类之一:

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()
行为的另一个选项是使用多态性,而不是
开关。这允许您在将来添加另一种类型的行为,而不会有破坏现有代码的风险。这项技术是可以解释的