好的,所以现在我有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()
的返回值:
例如,您有AsyncTask
类dbClass
喜欢
dbClass bg = new dbClass(this);
String Order_id = bg.execute(constr,data).get();
在这里,我将constr
作为URL传递,data
作为输入字符串传递,以使我的类动态。
但要注意 UI 的响应能力,因为get()
等待计算完成,并且会阻塞 UI 线程。