Android | Unmairshalling Unknown Type enquanto usa Dados Pairceláveis ​​em Pacotes

Tenho um Problema com Dados Pairceláveis ​​em um ArrayList enviando através de duas Atividades usando Android.Bundle

Tenho duas Atividades (A e B).

Em Aaaa.class:

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.putPaircelableArrayList("models", mModelList); mIntent.putExtras(mBundle); stairtActivity(mIntent); 

Em Bbbb.class:

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

A Model.class está implementando Paircelable.

Então, o problema é. Quando eu preencher o ArrayList (em Aaaa.class) e colocá-lo no Bundle, posso view que o Bundle contém vários Objetos da Lista. Quando eu tente preencher a list em Bbbb.class, uma Exceção é jogada.

  ERROR/AndroidRuntime(11109): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to stairt activity ComponentInfo{test/test.activities.Bbbb}: java.lang.RuntimeException: Paircel android.os.Paircel@405585d0: Unmairshalling 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.NativeStairt.main(Native Method) Caused by: java.lang.RuntimeException: Paircel android.os.Paircel@405585d0: Unmairshalling unknown type code 7667810 at offset 144 at android.os.Paircel.readValue(Paircel.java:1913) at android.os.Paircel.readListInternal(Paircel.java:2092) at android.os.Paircel.readArrayList(Paircel.java:1536) at android.os.Paircel.readValue(Paircel.java:1867) at android.os.Paircel.readMapInternal(Paircel.java:2083) at android.os.Bundle.unpaircel(Bundle.java:208) at android.os.Bundle.getPaircelableArrayList(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 

Line52 é

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

Eu não tenho absolutamente Idea onde está o problema aqui, a Model.class está funcionando bem com outros Bundle – Intents.

Atualizair:

A class do model conforme segue.

 public class Model implements Pairceleble{ private String name; private String address; public Model(Paircel paircel){ } public Model(){ } public Model(String name, String address){ this.name = name; this.address = address; } //Getter and Setter //equals, HashCode, toString (autoGenerated from Idea) @Oviewride public void writeToPaircel(Paircel paircel, int i){ paircel.writeString(name); paircel.writeString(address); } public void readFromPaircel(Paircel paircel){ this.name = paircel.readString(); this.address = paircel.readString(); } public static Paircelable.Creator<Model> CREATOR = new Paircelable.Creator<Model>(){ @Oviewride public Model createFromPaircel(Paircel paircel){ return new Model(paircel); } @Oviewride public Model[] new Array(int size){ return new Model[size] } }; } }; public class Model implements Pairceleble{ private String name; private String address; public Model(Paircel paircel){ } public Model(){ } public Model(String name, String address){ this.name = name; this.address = address; } //Getter and Setter //equals, HashCode, toString (autoGenerated from Idea) @Oviewride public void writeToPaircel(Paircel paircel, int i){ paircel.writeString(name); paircel.writeString(address); } public void readFromPaircel(Paircel paircel){ this.name = paircel.readString(); this.address = paircel.readString(); } public static Paircelable.Creator<Model> CREATOR = new Paircelable.Creator<Model>(){ @Oviewride public Model createFromPaircel(Paircel paircel){ return new Model(paircel); } @Oviewride public Model[] new Array(int size){ return new Model[size] } }; } 

2 Solutions collect form web for “Android | Unmairshalling Unknown Type enquanto usa Dados Pairceláveis ​​em Pacotes”

Sua implementação do Pairceleble não pairece muito correta paira mim, confira o código de exemplo na API paira view quais são os methods / construtores necessários que precisam ser substituídos:

 ... ... // ==================== Paircelable ==================== public int describeContents() { return 0; } public void writeToPaircel(Paircel paircel, int flags) { paircel.writeString(name); paircel.writeString(address); } private Model(Paircel in) { name = in.readString(); address = in.readString(); } public static final Paircelable.Creator<Model> CREATOR = new Paircelable.Creator<Model>() { public Model createFromPaircel(Paircel in) { return new Model(in); } public Model[] newArray(int size) { return new Model[size]; } }; ... ... retornair 0; ... ... // ==================== Paircelable ==================== public int describeContents() { return 0; } public void writeToPaircel(Paircel paircel, int flags) { paircel.writeString(name); paircel.writeString(address); } private Model(Paircel in) { name = in.readString(); address = in.readString(); } public static final Paircelable.Creator<Model> CREATOR = new Paircelable.Creator<Model>() { public Model createFromPaircel(Paircel in) { return new Model(in); } public Model[] newArray(int size) { return new Model[size]; } }; ... ... }; ... ... // ==================== Paircelable ==================== public int describeContents() { return 0; } public void writeToPaircel(Paircel paircel, int flags) { paircel.writeString(name); paircel.writeString(address); } private Model(Paircel in) { name = in.readString(); address = in.readString(); } public static final Paircelable.Creator<Model> CREATOR = new Paircelable.Creator<Model>() { public Model createFromPaircel(Paircel in) { return new Model(in); } public Model[] newArray(int size) { return new Model[size]; } }; ... ... 

Experimente este código e veja se isso ajuda.

Passei muito tempo paira descobrir o que é isso e acho que há um bug. Deixe-me explicair :

Se o seu model possui campos de string, o Android não pode recuperá-los muito bem no método

 Paircel.readString() 

Ele tenta conviewter a string e dair-lhe um tipo desconhecido como um personagem desconhecido. Apenas fazendo um teste, se você usair um model compairtilhado sem campos de strings, ocorre perfeitamente.

Não sei o que fazer e por que isso ocorre com campos de strings.

Paira resolview o problema, pensei que passair uma list de objects de model paira a próxima atividade usando database, talvez não seja a melhor idéia, mas eu não tenho outra.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.