从 AsyncTask 类 onPostExecute 方法返回值



好的,所以现在我有Class A包含一些微调器,这些微调器的值将由扩展Class B填充,AsnycTask从 Web 服务中获取微调器值。在 B 类中,我设法检索值,显示在 Toast 中。现在的问题是如何将这些微调器值传递回 A 类?

我试过了

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

通过将Class A传递给Class B并将值存储在Class A的公共变量中,如下所示

@Override
protected void onPostExecute(String result)
{
  classA.classAvariable = result;
}

但是,每当我尝试阅读classAvariable时,我总是会得到NullPointer Exception。似乎从未为变量分配结果。出于可读性的目的,我需要分离Class B而不是用作内联类。

我的Java程序员同事有什么想法吗?

这里的问题是,当你执行你的AsynchTask时,它的doInBackground()方法在单独的线程中运行,并且启动这个AsynchTask的线程向前移动,因此AsynchTask在你的变量上发生的更改不会立即反映在父线程(谁说这个AsynchTask)上。

例--

class MyAsynchTask
{
doInbackground()
{
a = 2;
}
}

int a = 5;
new MyAsynchTask().execute();

这里仍然是 5

创建一个类似OnCompletRequest()的接口,然后将其传递给您的 ClassB 构造函数,并简单地调用此接口内的方法,例如在 onPostExecute(String result) 的方法中调用complete(yourList list)

您可以通过调用 AsyncTask 类的 get() 方法来检索 protected Boolean doInBackground() 的返回值:

例如,您有AsyncTaskdbClass喜欢

dbClass bg = new dbClass(this);
String Order_id = bg.execute(constr,data).get();

在这里,我将constr作为URL传递,data作为输入字符串传递,以使我的类动态。

但要注意 UI 的响应能力,因为get()等待计算完成,并且会阻塞 UI 线程。

最新更新