我有一个回调函数,其结果保存在类变量中,如下所示:
public class MyClass {
private double myDouble;
private MyObject myObject;
public myMethod() {
AnotherObject anotherObject = new AnotherObject();
anotherObject.getInfo(new Callback<String>() {
@Override
public void success(MyObject myObject) {
MyClass.this.myObject = myObject; // I save myObject inside the class variable myObject
Log.d("LOG", "Value of myObject " + MyClass.this.myObject);
}
// a method for the failure case
});
Log.d("LOG", "Value of myObject " + MyClass.this.myObject);
}
}
第一条日志消息给出了正确的值,我假设类变量myObject
正确存储了对象值。但是,在success
函数之外的第二条日志消息会返回null
。
如何在回调函数之外获取正确的对象值?
答案 0 :(得分:6)
这是一个回调,即本质上是异步的。您无法知道何时调用success()
方法,并且在检查其值后可能会对myObject
进行分配。请确保在回调完成后致电Log.d()
。
答案 1 :(得分:3)
您假设传递给getInfo()的回调将在返回时立即执行 。鉴于您观察到的行为,情况并非如此。实际上,在 getInfo()返回后调用回调。
有时会立即调用回调,但在这种情况下不会。在另一个线程中完成的工作调用了许多回调,在这些情况下,调用getInfo()的线程只是继续,而另一个线程进行一些计算。当你有一个不能保证立即调用的回调时,你应该只在回调本身或者在调用回调之后的某个时间引用它的结果。
答案 2 :(得分:0)
尝试声明变量public static
public static MyObject myObject
并将其用作
MyClass.myObject = something; //assign the data