对象在回调函数之外变为空

时间:2016-03-12 18:24:58

标签: java android

我有一个回调函数,其结果保存在类变量中,如下所示:

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

如何在回调函数之外获取正确的对象值?

3 个答案:

答案 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