Java 对象在回调函数外变为null
我有一个回调函数,其结果保存在类变量中,如下所示:Java 对象在回调函数外变为null,java,android,Java,Android,我有一个回调函数,其结果保存在类变量中,如下所示: public class MyClass { private double myDouble; private MyObject myObject; public myMethod() { AnotherObject anotherObject = new AnotherObject(); anotherObject.getInfo(new Callback<S
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);
}
}
公共类MyClass{
私人双我双;
私有MyObject MyObject;
公共方法(){
AnotherObject AnotherObject=新的AnotherObject();
另一个Object.getInfo(新回调(){
@凌驾
公共无效成功(MyObject MyObject){
MyClass.this.myObject=myObject;//我将myObject保存在类变量myObject中
Log.d(“Log”,“myObject的值”+MyClass.this.myObject);
}
//失效案例的一种求解方法
});
Log.d(“Log”,“myObject的值”+MyClass.this.myObject);
}
}
第一条日志消息给出了正确的值,根据该值,我假设类变量myObject
正确存储了对象值。但是,第二条日志消息位于success
函数的正外部,返回null
如何在回调函数之外获得正确的对象值?尝试声明变量public static
public static MyObject myObject
并将其用作
MyClass.myObject = something; //assign the data
这是一个回调,即本质上是异步的。您无法知道何时将调用
success()
方法,并且对myObject
的赋值可能在检查其值后发生。确保在回调完成后调用Log.d()
。您假定传递给getInfo()的回调在返回后将立即执行。考虑到你观察到的行为,情况并非如此。实际上,在getInfo()返回后的某个时间调用回调
有时会立即调用回调,但在这种情况下不会。许多回调是由另一个线程中完成的工作调用的,在这种情况下,调用getInfo()的线程只是在另一个线程执行一些计算时继续进行。如果您有这样一个回调,但不能保证立即调用,您应该只在回调本身中或在调用回调后的某段时间内引用它的结果。对不起,在创建变量static后,您会像这样访问它“MyClass.myObject”吗?然后尝试将变量重命名为其他变量。是的,
MyClass.myObject
。重命名后,仍然null
回调是异步的。添加static没有任何作用您的代码为“second”Log.d
打印null
,因为它实际上是“first”执行的,所以不会“变为null”;它已经是null