如何将asynctask onpostexecute方法的结果传递给父活动android

时间:2012-03-28 14:36:41

标签: android android-asynctask

我正在开发一个应用程序,其中我需要将asynctask的onPostExecute方法的结果的值发送到上一个活动,即调用aync任务的活动.pls放置一些代码。感谢Anyhelp

5 个答案:

答案 0 :(得分:8)

两种方式:

  1. 声明类将AsyncTask扩展为父Activity中的私有类
  2. 将Handler或Activity本身作为扩展AsyncTask的类的参数传递
  3. 如果我是你,我会按照第一个选项 看看DOCS

    class MyActivitySubclass extends Activity {
    
        function runOnPostExecute(){
            // whatever
        }
    
        private class MyTask extends AsyncTask<Void, Void, Void> { 
    
            void doInBackground(Void... params){
                // do your background stuff
            }
    
            void onPostExecute(Void... result){
                runOnPostExecute();
            }
    
        }
    
    }
    

    注1

    放置在函数onPostExecute正文中的代码已在Activity线程上运行,您应该只提及 this 关键字导致MyTask.this而不是{{ 1}}

答案 1 :(得分:2)

如果你的AsyncTask是一个内部类,你只需从onPostExecute()调用你的活动中的一个方法:

public class MyActivity extends Activity {

    public void someMethod(String someParam) {
        // do something with string here
    }

    public class InnerTask extends AsyncTask<...> {

        protected void onPostExecute(result) {
            someMethod(Send parameters);
        }

    }

}

答案 2 :(得分:1)

onPostExecute方法在主UI线程上触发,因此AsyncTasks调用者已经在那里完成了所有操作。

http://developer.android.com/reference/android/os/AsyncTask.html

答案 3 :(得分:1)

在OnPostExecute中触发一个事件。

答案 4 :(得分:0)

这是Marek Sebera对答案的补充,他指出使用处理程序。为了使代码简单直观,请使用界面。这不是外星人的概念,我们一直用它来回调函数(例如:OnClickListner等)。代码看起来像这样。

    public class InnerTask extends AsyncTask<...> 
    {
        interface ResultHandler
        {
            void gotResult(<> result);
        }

        private ResultHandler myResult;

        //constructor
        public InnerTask(....params...,ResultHandler callback)
        {
            ...
            this.myResult = callback;
        }

        protected void onPostExecute(<>result) 
        {
            ...
            myResult.gotResult(result);
        }

    }

    public class MyActivity extends Activity implements InnerTask.ResultHandler
    {
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            //do something
            //if you want the InnerTask to execute here
            InnerTask i = new InnerTask(....params...,this);    //send 'this' as parameter
            i.execute();
        }
        @Override
        public void gotResult(<> result)
        {
            //from onPostExecute
        }
    }

如果我们想在多个站点使用相同的AsynTask类,我们可以使用这种类型的实现,而不是使用嵌套类实现。