如何从android中的异步任务返回值

Vig*_*esh 7 android android-asynctask

我创建了一个异步任务来调用我的服务器从DB获取数据.
我需要处理从http服务器调用返回的结果.
从我的活动我在许多地方调用异步任务.所以我不能使用成员变量来访问结果.有什么办法吗?

public Result CallServer(String params)
{

    try
    {
    new MainAynscTask().execute(params);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return aResultM;//Need to get back the result

}  

    private class MainAynscTask extends AsyncTask<String, Void, Result> {


    @Override
    protected Result doInBackground(String... ParamsP) {    
        //calling server codes
        return aResultL;
    }       
    @Override
       protected void onPostExecute(Result result) {
          super.onPostExecute(result);
          //how i will pass this result where i called this task?
       }
Run Code Online (Sandbox Code Playgroud)

kla*_*anm 15

调用execute()方法后,尝试调用AsyncTask的get()方法.这适合我

http://developer.android.com/reference/android/os/AsyncTask.html#get()

public Result CallServer(String params)
{
   try
   {
       MainAynscTask task = new MainAynscTask();
       task.execute(params);
       Result aResultM = task.get();  //Add this
   }
   catch(Exception ex)
   {
       ex.printStackTrace();
   }
   return aResultM;//Need to get back the result

} 
...
...
Run Code Online (Sandbox Code Playgroud)

  • AsyncTask它在其他线程中执行,如果你尝试这样做,你的主线程将被刷新,而任务不会从服务器获取数据,并且活动无法在触摸屏幕时处理用户事件. (2认同)

use*_*793 3

我可以建议两种方法 -

  1. onPostExecute(Result)AsyncTask。请参阅http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result)

  2. 发送广播并附加结果。

AsyncTask是一个异步任务,因此将结果返回给调用者是没有意义的。onPostExecute()而是像将值设置为等那样处理结果TextView。或者发送广播,以便其他侦听器可以处理结果。