android - java.lang.IllegalArgumentException : Duplicate key in ArrayMap: null

标签 android android-intent parcelable

当我尝试从 Intent 中获取额外内容时,出现此错误。 getIntent().getParcelableArrayListExtra(KEY)

当我更改 KEY 时,错误变为 java.lang.NullPointerException。 我无法理解为什么会发生这种情况。有许多 Parcelable 对象运行良好。这也工作得很好(所以,Parcelable 对象没有问题),直到我将其他对象放入具有不同键值对的 Intent 中,并且也可能做错了什么。有人能告诉我为什么会发生这个错误吗?此类错误背后的可能原因是什么?

您也可以检查日志。

02-24 02:55:21.927 28362-28362/com.abc.app E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.abc.app, PID: 28362
     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.abc.app/com.abc.app.activity.FinalActivity}: java.lang.IllegalArgumentException: Duplicate key in ArrayMap: null
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2493)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555)
         at android.app.ActivityThread.access$800(ActivityThread.java:176)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437)
         at android.os.Handler.dispatchMessage(Handler.java:111)
         at android.os.Looper.loop(Looper.java:194)
         at android.app.ActivityThread.main(ActivityThread.java:5576)
         at java.lang.reflect.Method.invoke(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:372)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
      Caused by: java.lang.IllegalArgumentException: Duplicate key in ArrayMap: null
         at android.util.ArrayMap.validate(ArrayMap.java:555)
         at android.os.Parcel.readArrayMapInternal(Parcel.java:2486)
         at android.os.BaseBundle.unparcel(BaseBundle.java:221)
         at android.os.Bundle.getParcelableArrayList(Bundle.java:848)
         at android.content.Intent.getParcelableArrayListExtra(Intent.java:5099)
         at com.abc.app.activity.FinalActivity.onCreate(FinalActivity.java:60)
         at android.app.Activity.performCreate(Activity.java:6005)
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2446)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555) 
         at android.app.ActivityThread.access$800(ActivityThread.java:176) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437) 
         at android.os.Handler.dispatchMessage(Handler.java:111) 
         at android.os.Looper.loop(Looper.java:194) 
         at android.app.ActivityThread.main(ActivityThread.java:5576) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 

当我更改 key 时,我会在日志中看到此内容以及空指针异常

02-24 03:01:38.074 32206-32206/com.abc.app W/ArrayMap: New hash 0 is before end of array hash 1374673561 at index 4 key null
     java.lang.RuntimeException: here
         at android.util.ArrayMap.append(ArrayMap.java:510)
         at android.os.Parcel.readArrayMapInternal(Parcel.java:2483)
         at android.os.BaseBundle.unparcel(BaseBundle.java:221)
         at android.os.Bundle.getParcelableArrayList(Bundle.java:848)
         at android.content.Intent.getParcelableArrayListExtra(Intent.java:5099)
         at com.abc.app.activity.FinalActivity.onCreate(FinalActivity.java:60)
         at android.app.Activity.performCreate(Activity.java:6005)
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2446)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2555)
         at android.app.ActivityThread.access$800(ActivityThread.java:176)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437)
         at android.os.Handler.dispatchMessage(Handler.java:111)
         at android.os.Looper.loop(Looper.java:194)
         at android.app.ActivityThread.main(ActivityThread.java:5576)
         at java.lang.reflect.Method.invoke(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:372)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)

最佳答案

就我而言,我在实现了 Parcelable 的 Model 类的 writeToParcel 方法中写入了两次相同的 key 。因此,在从 Bundle 保存/检索它时,它给我带来了错误。

代码错误:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(feature_id);
    dest.writeString(tab_custom_name);
    dest.writeString(sort_order);
    dest.writeString(tab_logo_selected_image);
    dest.writeString(tab_logo_unselected_image);
    dest.writeString(tab_logo_unselected_image);

所以,我删除了末尾写的两行类似的行之一。之后就可以正常工作了。

关于android - java.lang.IllegalArgumentException : Duplicate key in ArrayMap: null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588311/

相关文章:

android - 如何从代码中找出我的 Android 应用程序是在模拟器还是真实设备上运行?

android - 在 Android 上与 Facebook 共享图像和文本

android - 将 Parcelable 的一个子类写入另一个 Parcel

android - 在实现 Parcelable 的同时读写 UUID、图像、音频和视频

android - 如何在Dalvik中生成INVOKE-POLYMORPHIC操作码

c# - Google Drive API/SDK,使用服务帐户更改所有者失败

android - 在 Android 上使用 OpenGL 时自动清除缓冲区

Android 多重通知避免更新时闪烁

java - Android Intent,操作创建文档,多次打开文件资源管理器创建重复的 0b 文件

android - 如何将 Android Parcelable 数组保存到文件中?