AsyncTask中的OnPostExcecute方法可以返回值吗?

我正在开发一个Android应用程序,需要使用AsyncTask进行networking连接。 我从主线程调用它。 所以doInBackground方法运行,然后返回到onPostExecute方法。 执行onPostExecute方法后,我想要返回一个值从它被调用的地方的活动,因为我有一些特定的活动,需要从onPostExecute方法返回的值的操作。 我如何解决这个问题? 如何从onPostExecute返回一个值?

提前致谢

Solutions Collecting From Web of "AsyncTask中的OnPostExcecute方法可以返回值吗?"

正如其名称所述,AsyncTask与UI线程asynchronous运行,onPostExecute方法将在doInBackground完成时的某个时间点被调用。 我们不在乎何时会调用onPostExecute方法(实际上在项目构build时没有办法告诉),我们唯一关心的是onPostExecute方法保证在未来的某个时刻被底层框架调用。 所以onPostExecute方法的目的是处理从工作线程返回的结果,这也是为什么onPostExecute方法的唯一参数是从doInBackground方法返回的结果的原因。

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

当然,你可以在Activity类中创build一些实例variables(或者使用listerner模式),并在onPostExecute方法中返回并准备好结果。 问题是你永远不知道什么时候这个结果准备在onPostExecute方法之外,因为它实际上是在应用程序运行时确定的。 除非你编写了一些等待机制不断地轮询结果,这样做会牺牲AsyncTask的好处,例如内置的API AsyncTask.get()使得AsyncTask与UI线程同步运行,并将结果返回给Activity。

最佳做法是更改您的devise,并将需要从AsyncTask返回的结果的操作代码移动到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); } } } 

只需将AsyncTask类作为内部类写入您的活动,然后声明任何您希望返回为全局的值。 是不是对您有帮助?