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