2010-09-04 186 views
4
HashMap myMap = (HashMap) getLastNonConfigurationInstance(); 

myMap始终为空。 getLastNonConfigurationInstance()返回一个对象。我的地图有两个键“符号”和“名称”。getLastNonConfigurationInstance总是返回null

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

如何杀死你的“最终”行,只是做“返回我的地图”?一个HashMap毕竟是一个对象。 – jlarson 2010-09-04 03:49:31

回答

5

如果getLastNonConfigurationInstance()返回一个非空的对象,然后(HashMap) getLastNonConfigurationInstance()要么返回相同的对象(如果该对象是一个HashMap)或挥动ClassCastException

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

确认getLastNonConfigurationInstance()实际上是返回一个非空对象。确认myMap实际上是空的。如果您使用调试器来检查这些值,请尝试将它们打印到控制台。调试器有时会对你说谎,或者至少会误导你。

+0

我已更新我的代码以显示onRetainNonConfigurationinstance() – 2010-09-04 03:14:08

+0

@Sheehan - 相关性是什么? – 2010-09-04 03:15:41

+0

我不确定它为什么返回null。 – 2010-09-04 03:17:46

0

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

13

我面临同样的问题。看起来像在除了onCreate()之外的其他任何东西中调用getLastNonConfigurationInstance()都返回null。我把这个语句移到了onCreate()方法中,并且它返回了我期望它返回的结果。

+0

Yey,谢谢!在这上面打了我的头。 – jfritz42 2012-01-13 23:44:44

+0

我在OnCreateOptionsMenu()中使用了getLastNonConfigurationInstance()并且它不为空 – Noya 2012-09-18 13:37:53

+0

我在onCreate上调用一个Loader,并且在它返回时getLastNonConfigurationInstance()的值丢失。所以在onCreate上获得并保留这个价值是一个很好的选择 – Bostone 2012-12-21 18:07:32