android - 嵌套 Parcelling : RuntimeException - Unmarshalling unknown type code 3211319 at offset 440

标签 android android-intent parcelable

我需要将一些数据发送到可能在不同上下文中运行的 Activity。 为此,我创建了一个类 say A,它有一个 ArrayList 数据类型 say B 作为其实例成员之一。我将 B 类声明为 A 类的内部类。为了通过 Intent 发送此类 A 的实例,我将 A 类和 B 类设为 Parcelable

类结构是这样的(这不包括完整的代码,例如为使类 Parcelable 编写的代码):

public class A implements Parcelable{

   public class B implements Parcelable{
         public ArrayList<String> value;
         ....
         .... 
          public void writeToParcel(Parcel dest, int flags) {
            dest.writeList(value);
           }
        ....
        ....
   }

   public List<B> group;
   public String name;

   ....
   .... 
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeList(group);
        dest.writeString(name);
       }
   ....
   ....
}

我使用了putExtra(String name, Parcelable value)函数来放入数据。

但是在接收端,我得到了以下异常:

 Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 1087): 1289817569622 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SET_VOIP_SUPP_SERVICE_REQUEST_LOCAL (has extras) } in com.hsc.example.android.MyApp.MyAppActuvity$1@43b409b0
E/AndroidRuntime( 1087):        at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:765)
E/AndroidRuntime( 1087):        at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 1087):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1087):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1087):        at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 1087):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1087):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1087):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime( 1087):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
E/AndroidRuntime( 1087):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1087): Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@43b51240: Unmarshalling unknown type code 3211319 at offset 440
E/AndroidRuntime( 1087):        at android.os.Parcel.readValue(Parcel.java:1777)
E/AndroidRuntime( 1087):        at android.os.Parcel.readListInternal(Parcel.java:1956)
E/AndroidRuntime( 1087):        at android.os.Parcel.readList(Parcel.java:1302)
E/AndroidRuntime( 1087):        at com.hsc.example.android.MyApp.A.<init>(A.java:61)
E/AndroidRuntime( 1087):        at com.hsc.example.android.MyApp.A.<init>(A.java:57)
E/AndroidRuntime( 1087):        at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:67)
E/AndroidRuntime( 1087):        at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:1)
E/AndroidRuntime( 1087):        at android.os.Parcel.readParcelable(Parcel.java:1845)
E/AndroidRuntime( 1087):        at android.os.Parcel.readValue(Parcel.java:1713)
E/AndroidRuntime( 1087):        at android.os.Parcel.readMapInternal(Parcel.java:1947)
E/AndroidRuntime( 1087):        at android.os.Bundle.unparcel(Bundle.java:169)
E/AndroidRuntime( 1087):        at android.os.Bundle.getParcelable(Bundle.java:1037)
E/AndroidRuntime( 1087):        at android.content.Intent.getParcelableExtra(Intent.java:3269)
E/AndroidRuntime( 1087):        at com.hsc.example.android.MyApp.MyAppActuvity$1.onReceive(MyAppActuvity.java:219)
E/AndroidRuntime( 1087):        at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:754)
E/AndroidRuntime( 1087):        ... 9 more

然后我将 B 类移到 A 类之外(因为我认为这可能是内部类的问题,并将 CREATOR 声明为静态。当 B 类是 A 类的内部类时,此静态声明不存在)。但这并没有帮助。

看来这个问题是嵌套Parceling导致的。

有什么建议吗??

注意:当我使用 Bundle 类的 android.os.Bundle.putParcelable(String key, Parcelable value) 函数,然后使用 android 解码它时.os.Bundle.getParcelable(String key) 然后一切都很好。因此,问题似乎仅与 Intents 相关。

最佳答案

您是否为两者都包含了 CREATOR?

public static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>() {
   public A createFromParcel(Parcel in) {
      return new A(in);
      }

   public A[] newArray(int size) {
      return new A[size];
      }
};

& 接受 Parcel 的构造函数:

public A(Parcel parcel) {
   name = parcel.readString();
   //etc..
}

?

关于android - 嵌套 Parcelling : RuntimeException - Unmarshalling unknown type code 3211319 at offset 440,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183858/

相关文章:

java - 多个 Activity 和 fragment 中的相同 Spinner。哪种实现方式最好?

android - setContentSize 在 cocos2dx3.0 中不起作用

android - 从 URL 读取 JSON 到 Android

android - 如何从我的应用程序访问 Android 设置?

尝试通过 Instagram 共享打印屏幕时出现 java.lang.ClassCastException : byte[] cannot be cast to android. os.Parcelable 错误

java - 如何通过 Activity 发送 ArrayList<CustomClass>()

java - 使用 Intent 启动 Activity 时遇到问题

android - 迁移到新的 kotlin-parcelize

android - Parcelable 对象在接收 Activity 时为 Null

android - 读取自定义类列表时包裹解码未知类型代码