AsyncTask类中onPostExecute方法返回值

9

好的,现在我有一个包含一些旋转器的Class A,这些旋转器的值将由扩展了AsnycTaskClass B填充,后者从Web服务中获取旋转器的值。在类B中,我成功地检索到了这些值,并在Toast中显示出来。问题是如何将这些旋转器的值传回Class A

我尝试过在Can OnPostExcecute method in AsyncTask RETURN values?中通过将Class A传递给Class B并将其存储在Class A的公共变量中来解决此问题,如下所示:

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

然而,每当我尝试读取classAvariable时,总是会出现NullPointer Exception。看起来这个变量从未被赋值。出于可读性的目的,我需要将Class B分离出来,而不是作为内联类使用。
有没有什么想法,我的Java程序员同伴们?

请提供您编写的代码。 - Nishant Shah
3个回答

1
问题在于,当您执行AsynchTask时,它的doInBackground()方法会在单独的线程中运行,并且启动该AsynchTask的线程继续向前移动,因此AsynchTask上发生的更改不会立即反映在父线程(启动此AsynchTask的线程)上的变量上。
例如 --
class MyAsynchTask
{

doInbackground()
{
a = 2;
}

}


int a = 5;

new MyAsynchTask().execute();

// 这里仍然是5


好的,如果你读了我的代码,我是在onPostExecute方法中完成任务的。这个方法应该在UI线程上运行,对吧? - Jack-V
是的!onPostExecute在UI线程中运行,但在doInBackground完成后运行。 - Mufazzal

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

你介意提供一个简短的代码片段吗?我不清楚如何在AsyncTask类中实现接口。 - Jack-V
我刚刚更新了@Nunu的代码,以帮助您了解它的工作原理。 - Ali Imran
非常感谢!这非常有帮助! - Jack-V

-1
你可以通过调用AsyncTask类的get()方法来检索protected Boolean doInBackground()的返回值:
例如,如果你有一个名为dbClass的AsyncTask类:
dbClass bg = new dbClass(this);
String Order_id = bg.execute(constr,data).get();

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接