Извините за мой плохой английский. В моем приложении я использую ImmutableMap из библиотеки Guava для хранения некоторых ключей и значений. Когда я нажимаю кнопку «домой», а затем снова открываю приложение, он падает, а logcat говорит, что на карте есть повторяющиеся значения. Это потому, что я заполняю карту в начале MainActivity. Возможно ли как-то узнать, если MainActivity уже существует и не заполнять его?Ошибка приложения при повторном открытии (ImmutableMap)
Одно решение: Единственным обходным решением, которое я вижу, является проверка размера карты, а если она равна нулю, заполните ее.
EDIT: Отображаются повторяющиеся значения, поскольку карта заполняется при первом запуске, а затем, после перезапуска активности, она пытается снова заполнить их, причиняя ошибку.
Код:
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
Вы можете оставить logcat – Martin
Вы реализовали как onStart, так и onResume? – ItayB
Нет, не знаю, не так ли? – Groosha