当前位置: 首页 > 面试题库 >

不可包裹的异常

汝昀
2023-03-14
问题内容

首先,我必须说,我一直在此站点上寻找我的问题的答案,我发现了有关此异常的多个主题,但毕竟所有主题对我没有太大帮助,所以这就是为什么我要发布这个。

每次尝试从包裹中恢复信息时,我都会遇到“包裹不可修复”异常。这是我的班级代码。

public class Persona implements Parcelable {

private String nombre,email,tel;

public Persona() {
    nombre = "";
    email = "";
    tel = "";
}

public Persona(String nombre, String email, String tel) {
    this.nombre = nombre;
    this.email = email;
    this.tel = tel;
}

public Persona(Parcel p){
    setNombre(p.readString());
    setEmail(p.readString());
    setTel(p.readString());
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getTel() {
    return tel;
}

public void setTel(String tel) {
    this.tel = tel;
}

@Override 
public String toString() {  
  return this.getNombre() + " " + this.getEmail() + " " + this.getTel();
}

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel des, int flags) {

    des.writeString(getNombre());
    des.writeString(getEmail());
    des.writeString(getTel());

}

public static final Parcelable.Creator<Persona> creator = new Creator<Persona>() {

    public Persona createFromParcel(Parcel source) {

        return new Persona(source);
    }

    public Persona[] newArray(int size) {

        return new Persona[size];
    }

};

}

和我的活动代码(此活动检索一个意图,该意图带有我刚刚指定的类型的ArrayList)

public class Contacts extends Activity {

private ArrayAdapter<String> names;
private Intent intent;
private ArrayList<String>nameList;
private ListView list;

public Contacts() {
    intent = new Intent();
    nameList = new ArrayList<String>();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contacts);
    setIntent(getIntent());
    iterateContacts();
    names = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getNameList());
    getList().setAdapter(getNames());
}

public void iterateContacts(){

    ArrayList<Persona> aux = GetIntent().getParcelableArrayListExtra("contactList");

    for(int i = 0; i<aux.size(); i++){

        String name = aux.get(i).getNombre();
        getNameList().add(name);
    }
}

public ArrayAdapter<String> getNames() {
    return names;
}

public void setNames(ArrayAdapter<String> names) {
    this.names = names;
}

public Intent GetIntent() {
    return intent;
}

public void setIntent(Intent intent) {
    this.intent = intent;
}

public ArrayList<String> getNameList() {
    return nameList;
}

public void setNameList(ArrayList<String> nameList) {
    this.nameList = nameList;
}

public ListView getList() {
    return list;
}

public void setList(ListView list) {
    this.list = list;
}

}

LOGCAT:

E/AndroidRuntime(861): FATAL EXCEPTION: main
09-10 02:39:10.738: E/AndroidRuntime(861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.take2/com.take2.Contacts}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class com.take2.Persona
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.os.Looper.loop(Looper.java:137)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.ActivityThread.main(ActivityThread.java:4745)
09-10 02:39:10.738: E/AndroidRuntime(861):  at java.lang.reflect.Method.invokeNative(Native Method)
09-10 02:39:10.738: E/AndroidRuntime(861):  at java.lang.reflect.Method.invoke(Method.java:511)
09-10 02:39:10.738: E/AndroidRuntime(861):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-10 02:39:10.738: E/AndroidRuntime(861):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-10 02:39:10.738: E/AndroidRuntime(861):  at dalvik.system.NativeStart.main(Native Method)
09-10 02:39:10.738: E/AndroidRuntime(861):  at com.take2.Contacts.onCreate(Contacts.java:28)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.Activity.performCreate(Activity.java:5008)
09-10 02:39:10.738: E/AndroidRuntime(861):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)

问题答案:

更改此:

public static final Parcelable.Creator<Persona> creator = new Creator<Persona>() {

对此:

public static final Parcelable.Creator<Persona> CREATOR = new Creator<Persona>() {

编辑:

而且看起来您的getList()返回null,因为在onCreate的结尾之前未设置它,所以它没有设置:

getList().setAdapter(getNames());

没有看到您在初始化它,这可能是原因吗?



 类似资料:
  • 我试图在包中保存对象的ArrayList(列表搁置项),以便下次打开活动时检索它。 (活动从firestore获取信息,我想减少每次打开活动时的读取次数并缩短加载时间)。 但我得到了这个错误信息: “android.os.Bundle”中的putParcelableArrayList(java.lang.String,java.util.ArrayList)不能应用于“(java.lang.Str

  • 我试图用JAXB从XSD生成java类。 XSD是我公司的官方XSD,因此我不能仅为我的项目修改它们。在害怕在这个网站上尝试和搜索之后,我决定直接问这个问题。 我有这个在我的XSD: 这导致了一个问题:包装。指数行已在包中定义。指数 在查看生成的代码后,我可以看到,我们有一个静态的类行,进入另一个静态的内部类行(在另一个索引下) 我得到错误的行(在顶部底部)嵌套的类型行不能隐藏封闭类型 如果名称发

  • 相比于单纯的数据对象,将context包装成一个提供一些方法的对象会是更好的实践。因为这样能提供一些方法供我们操作context里面的数据。 // dependencies.js export default { data: {}, get(key) { return this.data[key]; }, register(key, value) { this.da

  • TimeDistributed包装器 Bidirectional包装器

  • R包是R函数的集合,包含代码和样本数据。 它们存储在R环境中名为"library"的目录下。 默认情况下,R在安装期间安装一组软件包。 当某些特定用途需要时,会在以后添加更多软件包。 当我们启动R控制台时,默认情况下只有默认包可用。 必须明确加载已安装的其他软件包,以供将要使用它们的R程序使用。 所有R语言版本的软件包都列在R软件包中。 以下是用于检查,验证和使用R软件包的命令列表。 检查可用的R

  • 在编程语言的一般术语中,包被设计用于提供使一组名称与另一组名称分离的方式。 在一个包中声明的符号不会与在另一个包中声明的相同符号冲突。 这样,包减少了独立代码模块之间的命名冲突。 LISP阅读器维护一个包含所有符号的表格。 当它找到新的字符序列时,它会创建一个新符号并存储在符号表中。 该表称为包。 当前包由特殊变量* package *引用。 LISP中有两个预定义的包 - common-lisp