getLastNonConfigurationInstance始终返回null

时间:2010-09-04 03:08:28

标签: java android data-structures object hashmap

HashMap myMap = (HashMap) getLastNonConfigurationInstance();

myMap始终为null。 getLastNonConfigurationInstance()返回一个对象。我的地图有两个键“symbol”和“name”。

public Object onRetainNonConfigurationInstance()
    {
        HashMap myMap = new HashMap();
        myMap.put("symbol", this.symbol);
        final Object data = myMap;
        return data;
    }

4 个答案:

答案 0 :(得分:13)

我遇到了同样的问题。看起来在onCreate()之外的任何东西中调用getLastNonConfigurationInstance()都会返回null。我将语句移动到onCreate()方法并且瞧..它返回了我期望它返回的内容。

答案 1 :(得分:5)

如果getLastNonConfigurationInstance()返回非空对象,则(HashMap) getLastNonConfigurationInstance()将返回相同的对象(如果该对象为HashMap),或者抛出ClassCastException

您描述的情况是不可能的,除非您在Java的强制转换操作符中发现了一个长期隐藏的错误。提示:你还没有。

验证getLastNonConfigurationInstance()实际上是否返回了非null对象。验证myMap实际上是否为空。如果您使用调试器来检查这些值,请尝试将它们打印到控制台。调试器有时可能骗你,或至少误导。

答案 2 :(得分:0)

你有没有告诉我们这种情况发生在什么情况?当配置发生更改时,在Activity的onDestroy()之前调用onRetainNonConfigurationInstance()。

答案 3 :(得分:0)

getLastNonConfigurationInstance()将返回保存在onRetainNonConfigurationInstance()方法中的引用。

onRetainNonConfigurationInstance()方法将在onStoponDestroy之间调用,如果发生任何配置更改,则可以在其中保存任何对象引用。

活动会保留此引用,直到onResume调用为止。

Activity.class

final void performResume(boolean followedByPause, String reason) {
    ...
    mLastNonConfigurationInstances = null;       // clearing reference
    ...
    mInstrumentation.callActivityOnResume(this); // onResume
}