抱歉我的英语不好。 在我的应用程序中,我使用Guava库中的ImmutableMap来存储一些键和值。 当我按下主页按钮,然后重新打开应用程序时崩溃,logcat说地图中有重复的值。 那是因为我在MainActivity start上填充了地图。 是否可能以某种方式找出,如果MainActivity已经存在而不是填充它?
一个解决方案:我看到的唯一解决方法是检查地图的大小,如果它为空,则填写它。
编辑:显示重复值,因为地图在首次启动时已填充,然后,在活动重启后,它会尝试再次填充它们,导致错误。
代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
Map.map_fill();
....
}
logcat的:
01-11 01:56:31.970: D/AndroidRuntime(30500): Shutting down VM
01-11 01:56:31.970: W/dalvikvm(30500): threadid=1: thread exiting with uncaught exception (group=0x41864ba8)
E/AndroidRuntime(30500): FATAL EXCEPTION: main
E/AndroidRuntime(30500): Process: ru.mastergroosha.idneval2, PID: 30500
E/AndroidRuntime(30500): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.mastergroosha.idneval2/ru.mastergroosha.idneval2.MainActivity}: java.lang.IllegalArgumentException: Multiple entries with same key: 01=Веригин Вадим Сергеевич and 01=Веригин Вадим Сергеевич
E/AndroidRuntime(30500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
E/AndroidRuntime(30500): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2248)
E/AndroidRuntime(30500): at android.app.ActivityThread.access$800(ActivityThread.java:138)
E/AndroidRuntime(30500): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1199)
E/AndroidRuntime(30500): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(30500): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(30500): at android.app.ActivityThread.main(ActivityThread.java:5050)
E/AndroidRuntime(30500): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(30500): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(30500): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime(30500): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime(30500): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(30500): Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: 01=Веригин Вадим Сергеевич and 01=Веригин Вадим Сергеевич
E/AndroidRuntime(30500): at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:150)
E/AndroidRuntime(30500): at com.google.common.collect.RegularImmutableBiMap.<init>(RegularImmutableBiMap.java:77)
E/AndroidRuntime(30500): at com.google.common.collect.ImmutableBiMap$Builder.build(ImmutableBiMap.java:172)
E/AndroidRuntime(30500): at ru.mastergroosha.idneval2.Map.make_names_array(Map.java:77)
E/AndroidRuntime(30500): at ru.mastergroosha.idneval2.MainActivity.onCreate(MainActivity.java:114)
E/AndroidRuntime(30500): at android.app.Activity.performCreate(Activity.java:5241)
E/AndroidRuntime(30500): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(30500): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
E/AndroidRuntime(30500): ... 11 more
答案 0 :(得分:2)
我猜你的地图是静态地图。
因此,每次进入onCreate(...)
回调时,都会尝试填写无法修改的地图。
如果你检查documentation of Activity,有几个原因可以调用onCreate(...)。
更好的解决方案是将您的地图声明为Application对象,以便您可以对地图进行初始化。
AndroidManifest.xml
YourApplication.class