Android AsyncTask中的OnPostExcecute方法能否返回值?

Android AsyncTask中的OnPostExcecute方法能否返回值?,android,android-asynctask,Android,Android Asynctask,我正在开发一个Android应用程序,它需要使用AsyncTask进行网络连接。我从主线程调用它。因此doInBackground方法运行,然后返回到onPostExecute方法。在执行onPostExecute方法之后,我想将一个值返回到调用它的活动,因为我必须返回该特定活动中的某个操作,该操作需要从onPostExecute方法返回的值。 我如何解决这个问题?如何从onPostExecute返回值 提前感谢您可以使用getter和setter从AsyncTask public class

我正在开发一个Android应用程序,它需要使用AsyncTask进行网络连接。我从主线程调用它。因此doInBackground方法运行,然后返回到onPostExecute方法。在执行onPostExecute方法之后,我想将一个值返回到调用它的活动,因为我必须返回该特定活动中的某个操作,该操作需要从onPostExecute方法返回的值。 我如何解决这个问题?如何从onPostExecute返回值


提前感谢

您可以使用getter和setter从
AsyncTask

public class MainActivity extends Activity {
    public String retunnumfromAsyncTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layouttest);
        new Asyntask(this).execute();
    }

    public class Asyntask extends AsyncTask<Void, Void, String> {
        private final Context Asyntaskcontext;

        public Asyntask(Context context){
            Asyntaskcontext = context;
        }

        @Override
        protected void onPostExecute(String result) {
            MainActivity mainactivity = (MainActivity) Asyntaskcontext;
            mainactivity.retunnumfromAsyncTask = result;       
            super.onPostExecute(result);
        }
    }
}
公共类MainActivity扩展活动{
从AsyncTask重新运行公共字符串;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.layouttest);
新建Asyntask(this.execute();
}
公共类Asyntask扩展了AsyncTask{
私有最终上下文Asyntaskcontext;
公共Asyntask(上下文){
Asyntaskcontext=上下文;
}
@凌驾
受保护的void onPostExecute(字符串结果){
MainActivity MainActivity=(MainActivity)Asyntaskcontext;
mainactivity.RetunumFromAsyncTask=结果;
super.onPostExecute(结果);
}
}
}

AsyncTask,如其名称所述,是与UI线程异步运行的,将来当doInBackground完成时,将调用onPostExecute方法。我们不关心何时调用onPostExecute方法(实际上在项目构建时无法确定),我们只关心onPostExecute方法在将来的某个时候被底层框架正确调用。所以onPostExecute方法的目的是处理从工作线程返回的结果,这也是onPostExecute方法的唯一参数是从doInBackground方法返回的结果的原因

我必须在特定活动中执行一些操作,这些操作需要从onPostExecute方法返回的值。我如何解决这个问题

当然,您可以在Activity类中创建一些实例变量(或使用listerner模式),在onPostExecute方法中返回并准备就绪时存储结果。问题是,您永远不知道在项目构建时在onPostExecute方法外部何时准备好此结果,因为它实际上是在应用程序运行时确定的。除非您编写一些等待机制来连续轮询结果,否则会牺牲AsyncTask的好处,例如,内置API使AsyncTask与UI线程同步运行并将结果返回给活动


最佳做法是更改设计并将需要从AsyncTask返回的结果的操作代码移动到onPostExecute方法中。希望这能有所帮助。

只需将AsyncTask类作为内部类写入活动,然后将想要返回的值声明为全局值。这对您有帮助吗?

see和@ManJan,我最近回答了一个类似的问题,解释了有关AsyncTask如何与UI线程一起工作的更多细节,希望这对您有所帮助。