Android 一个活动中有多个异步任务类

Android 一个活动中有多个异步任务类,android,android-asynctask,Android,Android Asynctask,我有一个包含一个按钮和一个listview的活动。listview包含来自webservice的值。当我单击此listview项目时,它会显示另一个活动中的详细信息 问题是,我们可以在单个活动中使用4个asynctask内部类吗。 第一个用于在listview中初始加载内容,第二个用于在我单击每个列表项时调用,第三个用于在我移动到listview中的下一页时调用(listview仅显示10项/页),第四个用于在我单击按钮时调用 这是正确的方法吗?是的,它是正确的。你想打多少次电话都可以。但是可以

我有一个包含一个按钮和一个listview的活动。listview包含来自webservice的值。当我单击此listview项目时,它会显示另一个活动中的详细信息

问题是,我们可以在单个活动中使用4个asynctask内部类吗。 第一个用于在listview中初始加载内容,第二个用于在我单击每个列表项时调用,第三个用于在我移动到listview中的下一页时调用(listview仅显示10项/页),第四个用于在我单击按钮时调用


这是正确的方法吗?

是的,它是正确的。你想打多少次电话都可以。但是可以做一个小的修改,而不是调用4 AsyncTask,您可以通过使其在流中通用来创建一个AsyncTask。
`

public class GetDataFromNetwork extends AsyncTask<Void,String,Object> {private  String ipAddress;
private  String webService;
private  String nameSpace;
private  String methodName;
private Context context;
private ProgressDialog progressDialog;
private SoapObject request;
private GetDataCallBack callBack;


/**
 * Set default progress Bar properties. Internal function called from setConfig 
 *   
 * @param progressBarStyle : Progress Dialog style (spinner or horizontal)
 * @param message : Message to be displayed on progressBar
 */
protected void setProgresDialogProperties(int progressBarStyle,
        String message) {
    progressDialog = new ProgressDialog(context);
    progressDialog.setProgress(0);
    progressDialog.setMax(100);
    progressDialog.setProgressStyle(progressBarStyle);
    progressDialog.setMessage(message);
}


public GetDataFromNetwork(Context context,int progressBarStyle,String message ,GetDataCallBack callBack) {
    this.callBack=callBack;
    this.context=context;
    setProgresDialogProperties(progressBarStyle, message);
}

/**
 * Used for setting up the location and config of remote location/webservice 
 * @param ipAddress : IP of webservice
 * @param webService : Name of webservice
 * @param nameSpace : NameSpace of webService
 * @param methodName :Name of function of the particular webservice
 */
public void setConfig(String ipAddress,String webService,String nameSpace,String methodName){
    this.ipAddress=ipAddress;
    this.webService=webService;
    this.nameSpace=nameSpace;
    this.methodName=methodName;

}


/**
 * Set parameter in SoapObject
 * @param requestParamater : Map of request
 */
@SuppressWarnings("rawtypes")
public void sendData(HashMap<String, Object> requestParamater) {
    }
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    progressDialog.show();
}
@Override
protected Object doInBackground(Void... params) {
    return result;
}
    @Override
protected void onPostExecute(Object result) {
    super.onPostExecute(result);
    progressDialog.dismiss();
}` 
公共类GetDataFromNetwork扩展异步任务{私有字符串ipAddress;
私有字符串Web服务;
私有字符串名称空间;
私有字符串methodName;
私人语境;
私有进程对话;
私有对象请求;
私有GetDataCallBack回调;
/**
*设置默认进度条属性。从setConfig调用内部函数
*   
*@param progressBarStyle:进度对话框样式(微调器或水平)
*@param message:progressBar上显示的消息
*/
受保护的void SetProgressDialogProperties(int progressBarStyle,
字符串消息){
progressDialog=新建progressDialog(上下文);
progressDialog.setProgress(0);
progressDialog.setMax(100);
progressDialog.setProgressStyle(progressBarStyle);
progressDialog.setMessage(消息);
}
公共GetDataFromNetwork(上下文上下文、int progressBarStyle、字符串消息、GetDataCallBack回调){
this.callBack=callBack;
this.context=context;
setProgresDialogProperties(progressBarStyle,消息);
}
/**
*用于设置远程位置/webservice的位置和配置
*@param ipAddress:webservice的IP
*@param webService:webService的名称
*@param nameSpace:webService的名称空间
*@param methodName:特定Web服务的函数名
*/
public void setConfig(字符串ipAddress、字符串webService、字符串命名空间、字符串methodName){
this.ipAddress=ipAddress;
this.webService=webService;
this.nameSpace=名称空间;
this.methodName=methodName;
}
/**
*在SoapObject中设置参数
*@param requestParamater:请求的映射
*/
@抑制警告(“原始类型”)
public void sendData(HashMap requestParamater){
}
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog.show();
}
@凌驾
受保护对象doInBackground(无效…参数){
返回结果;
}
@凌驾
受保护的void onPostExecute(对象结果){
super.onPostExecute(结果);
progressDialog.disclose();
}` 

现在,当您想要与服务器交互时,可以调用该类。

您需要在每个类中执行繁重的任务吗?因为如果不从所有Web服务中获取数据,我会减少它们。尝试在第一个AsyncTask中缓存所有内容,并在浏览appall时加载数据。4使用不同的webservice调用。然后我认为有四个任务是可以的。当您仅从活动中访问它们时,它们应该是唯一的内部类。好的,沃伦。感谢您的快速回复。让我检查一下。@Mohit“在调用4 AsyncTask时,您可以通过使其在流中为泛型来创建一个AsyncTask”。我不明白你的意思。以这种方式使你的AsyncTask可以重复使用。检查编辑过的答案,希望你能有所了解。在代码中,哪里可以使用progressDialog.Disclesh()?