Unmarshalling unknown type code (settings)

本文探讨了在 Android 应用中使用 Parcelable 接口传递自定义 Model 类型对象时遇到的 UnmarshallingUnknownType 异常问题,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android | Unmarshalling Unknown Type while using Parcelable Data in Bundles
ArrayList<Model> mModelList = new ArrayList<Model>
//Fill ArrayList with a few Model-Objects


Bundle mBundle = new Bundle;
Intent mIntent = new Intent(Aaaa.this, Bbbb.class);


mBundle.putParcelableArrayList("models", mModelList);
mIntent.putExtras(mBundle);


startActivity(mIntent);

Bundle mBundle = getIntent().getExtras();
ArrayList<Model> = mBundle.getParcelableArrayList("models");

ERROR/AndroidRuntime(11109): FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{test/test.activities.Bbbb}: java.lang.RuntimeException: Parcel android.os.Parcel@405585d0: Unmarshalling unknown type code 7667810 at offset 144
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@405585d0: Unmarshalling unknown type code 7667810 at offset 144
    at android.os.Parcel.readValue(Parcel.java:1913)
    at android.os.Parcel.readListInternal(Parcel.java:2092)
    at android.os.Parcel.readArrayList(Parcel.java:1536)
    at android.os.Parcel.readValue(Parcel.java:1867)
    at android.os.Parcel.readMapInternal(Parcel.java:2083)
    at android.os.Bundle.unparcel(Bundle.java:208)
    at android.os.Bundle.getParcelableArrayList(Bundle.java:1144)
    at test.activities.Bbbb.onCreate(Bbbb.java:52)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    ... 11 more

ArrayList<Model> = mBundle.getParcelableArrayList("models");

public class Model implements Parceleble{


  private String name;
  private String address;


  public Model(Parcel parcel){
  }
  public Model(){
  }
  public Model(String name, String address){
    this.name = name;
    this.address = address;
  }


  //Getter and Setter


  //equals, HashCode, toString (autoGenerated from Idea)


  @Override
  public void writeToParcel(Parcel parcel, int i){
    parcel.writeString(name);
    parcel.writeString(address);
  }


  public void readFromParcel(Parcel parcel){
    this.name = parcel.readString();
    this.address = parcel.readString();
  }


  public static Parcelable.Creator<Model> CREATOR = new Parcelable.Creator<Model>(){
  @Override
  public Model createFromParcel(Parcel parcel){
    return new Model(parcel);
  }


  @Override
  public Model[] new Array(int size){
    return new Model[size]
  }
};
}

... ...


// ==================== Parcelable ====================
public int describeContents() {
  return 0;
}


public void writeToParcel(Parcel out, int flags) {
  parcel.writeString(name);
  parcel.writeString(address);
}


private Model(Parcel in) {
  name = in.readString();
  address = in.readString();
}


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


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


... ...
<< `unknown type name InitStack` 这个错误提示表明编译器遇到了一个未定义或未知的类型名称 `InitStack`。这种错误通常发生在以下几种情况中: ### 可能的原因及解决方案 1. **拼写错误**: - 检查是否正确地书写了数据类型的名称。 ```c // 错误示例 InitStack stack; // 正确示例(假设正确的类型名是 Stack) typedef struct { int *data; int top; int size; } Stack; Stack stack; ``` 2. **缺少声明或定义**: - 如果使用了一个自定义的数据结构如栈、队列等,在使用之前必须先进行正确定义或者包含对应的头文件。 示例代码展示如何定义和初始化一个简单的栈结构体并避免该错误: ```c #include <stdio.h> #include <stdlib.h> // 定义栈结构体 typedef struct { int* data; // 栈存储空间数组指针 int capacity; // 最大容量 int top; // 当前栈顶位置索引(-1表示空) } Stack; // 初始化栈函数原型声明(如果放在其他源文件需在当前文件内声明) void InitStack(Stack* s, int size); int main() { Stack my_stack; // 调用初始化函数前确保已经正确定义好相应的数据类型以及其操作接口 InitStack(&my_stack, 10); return 0; } // 实现栈的初始化功能 void InitStack(Stack* s, int size){ if (s == NULL) {return;} s->capacity = size; s->top = -1; s->data = (int*)malloc(sizeof(int)*size); if(s->data==NULL){printf("Memory allocation failed\n"); exit(1);} } ``` 3. **没有包括必要的库/头文件** - 若此类型是从标准库或者其他外部库引入,则可能忘记添加适当的#include指令行。 解释:比如当你想利用某个特定平台上的API时,记得查阅文档确认所需的头文件列表,并将它们加入到程序顶部适当的位置处。例如某些系统可能会提供预构建好的容器类支持像堆栈那样行为的东西。 --- 以上就是关于“unknown type name”的常见成因与修复办法。希望对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值