【问题标题】:How to return the result returning from asynctask on background如何在后台返回从异步任务返回的结果
【发布时间】:2013-03-22 09:32:48
【问题描述】:

我正在后台运行一个任务,并从中返回一个结果。在异步任务完成之前返回结果为 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;
}

【问题讨论】:

标签: android


【解决方案1】:

四个步骤 执行异步任务时,任务会经过 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);
 }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多