0

我正在后台运行一个任务,并从中返回一个结果。结果在异步任务完成之前返回为 null。我该如何解决它

public Result CallServer(String zObjectNameP, String zMethodNameP, String QueryStringP)
{
 aResultM=new Result();
MainAynscTask asyncTask = new MainAynscTask();
try
{
asyncTask.execute(zObjectNameP,zMethodNameP,QueryStringP);
}
catch(Exception ex)
{

}
return aResultM;
}
4

1 回答 1

1

4 个步骤 当一个异步任务被执行时,该任务会经历 4 个步骤:

  1. onPreExecute(),在任务执行之前在 UI 线程上调用。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。

  2. doInBackground(Params...),在 onPreExecute() 完成执行后立即在后台线程上调用。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数传递到这一步。计算的结果必须由这一步返回,并将传递回最后一步。此步骤还可以使用 publishProgress(Progress...) 来发布一个或多个进度单位。这些值在 UI 线程上的 onProgressUpdate(Progress...) 步骤中发布。

  3. onProgressUpdate(Progress...),在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。

  4. onPostExecute(Result),在后台计算完成后在 UI 线程上调用。后台计算的结果作为参数传递给该步骤。

使用处理程序

在你的活动中

mHandler = new Handler() { 
@Override public void handleMessage(Message msg) { 
  String s=(String)msg.obj;
  tv.setText("Result = "+s);

}
};    

在你的 onPostexecute

protected void onPostExecute(String result)//result returned in doInbackground
{
pd.dismiss();
if(result != null)
 {
 Message msg=new Message();
 msg.obj=result.toString();
 mHandler.sendMessage(msg);
 }
}
于 2013-04-01T11:32:37.957 回答