坏Parcelable异常 [英] Bad Parcelable exception

查看:155
本文介绍了坏Parcelable异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先我必须说,从来就一直在寻找在这个网站回答我的问题就在这里,我发现有关此异常几个主题,但毕竟线程didn't帮我那么多那么that's我为什么我张贴这一点。

I'm得到一个坏Parcelable例外,每次我尝试从包裹中恢复的信息。这里是我的课code。

 公共类假面实现Parcelable {

私人字符串NOMBRE,电子邮件,电话;

公众人物(){
    NOMBRE =;
    电子邮件=;
    联系电话=;
}

公众人物(字符串NOMBRE,字符串email,字符串电话){
    this.nombre =农布雷;
    this.email =电子邮件;
    this.tel =电话;
}

公众人物(地块P){
    setNombre(p.readString());
    setEmail(p.readString());
    SETTEL(p.readString());
}

公共字符串getNombre(){
    返回农布雷;
}

公共无效setNombre(字符串农布雷){
    this.nombre =农布雷;
}

公共字符串getEmail(){
    返回的电子邮件;
}

公共无效setEmail(字符串电子邮件){
    this.email =电子邮件;
}

公共字符串金田(){
    回电话;
}

公共无效SETTEL(字符串TEL){
    this.tel =电话;
}

@覆盖
公共字符串的toString(){
  返回this.getNombre()++ this.getEmail()++ this.getTel();
}

公众诠释describeContents(){
    返回0;
}

公共无效writeToParcel(宗德,INT标志){

    des.writeString(getNombre());
    des.writeString(getEmail());
    des.writeString(金田());

}

公共静态最终Parcelable.Creator<假面>创造者=新的创造者和LT;假面>(){

    公众人物createFromParcel(宗源){

        返回的新女神(源);
    }

    公众人物[] newArray(INT尺寸){

        返回新的女神【尺寸】;
    }

};
 

}

和我的活动code(本次活动获取承载我只是指定类型的ArrayList的意图)

 公共类联系方式延伸活动{

私人ArrayAdapter<字符串>名称;
私人意图的意图;
私人的ArrayList<字符串>名单;
私人的ListView列表;

公共联络人(){
    意图=新的意图();
    名单=新的ArrayList<字符串>();
}

@覆盖
保护无效的onCreate(包savedInstanceState){
    // TODO自动生成方法存根
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.contacts);
    setIntent(getIntent());
    iterateContacts();
    名称=新的ArrayAdapter<字符串>(这一点,android.R.layout.simple_list_item_1,getNameList());
    。的GetList()setAdapter(getNames());
}

公共无效iterateContacts(){

    ArrayList的<假面>辅助= GetIntent()getParcelableArrayListExtra(contactList);

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

        字符串名称= aux.get(我).getNombre();
        。getNameList()加(名);
    }
}

公共ArrayAdapter<字符串> getNames(){
    返回名称;
}

公共无效setNames(ArrayAdapter<字符串>的名字){
    this.names =名称;
}

公众意向GetIntent(){
    返回的意图;
}

公共无效setIntent(意向意图){
    this.intent =意图;
}

公众的ArrayList<字符串> getNameList(){
    返回名单;
}

公共无效setNameList(ArrayList中<字符串>名单){
    this.nameList =名单;
}

公众的ListView的GetList(){
    返回列表;
}

公共无效SETLIST(ListView控件列表){
    this.list =清单;
}
 

}

logcat的:

  E / AndroidRuntime(861):致命异常:主要
2月9日至10日:39:10.738:E / AndroidRuntime(861):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.take2 / com.take2.Contacts}:android.os.BadParcelableException:Parcelable协议要求Parcelable类com.take2.Persona上.Creator称为对象CREATOR
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.ActivityThread.access $ 600(ActivityThread.java:130)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1195)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.os.Handler.dispatchMessage(Handler.java:99)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.os.Looper.loop(Looper.java:137)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.ActivityThread.main(ActivityThread.java:4745)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在java.lang.reflect.Method.invokeNative(本机方法)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在java.lang.reflect.Method.invoke(Method.java:511)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在dalvik.system.NativeStart.main(本机方法)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在com.take2.Contacts.onCreate(Contacts.java:28)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.Activity.performCreate(Activity.java:5008)
2月9日至10日:39:10.738:E / AndroidRuntime(861):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
 

解决方案

更​​改此:

 公共静态最终Parcelable.Creator<假面>创造者=新的创造者和LT;假面>(){
 

要这样:

 公共静态最终Parcelable.Creator<假面> CREATOR =新的创造者和LT;假面>(){
 

编辑:

也像你的GetList()你这样做在的onCreate结束前返回null,因为它不是设置:

 的GetList()setAdapter(getNames())。
 

不看是你初始化,这可能是原因?

first of all I must say I´ve been searching for an answer to my problem here at this site and I found several topics regarding this exception but after all the threads didn´t help me that much so that´s why I´m posting this.

I´m getting a Bad Parcelable exception everytime I try to recover information from a parcel. Here's my class code.

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];
    }

};

}

And my activity code (this activity retrieves an intent that carries an ArrayList of the type I just specified)

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)

解决方案

Change this:

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

To this:

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

Edit:

Also looks like your getList() returns null since it wasnt set before you do this at the end of onCreate:

getList().setAdapter(getNames());

Dont see were you initialize it, might this be the cause?

这篇关于坏Parcelable异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆