【发布时间】:2015-08-27 10:34:35
【问题描述】:
我有两种不同的设备:
- 手机 Sony Xperia SP Android v4.3
- 平板爱可视101 helium Android v4.4
当我在平板电脑上启动我的应用程序时,它运行良好。
所以我尝试在我的另一台设备(索尼)上启动我的应用程序。在此设备上,当我尝试从处于活动状态的意图中恢复可打包对象时出现错误。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*/com.*.activity.QRCodeScanResultActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@419f2ef8: Unmarshalling unknown type code 7209057 at offset 9620
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.access$600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@419f2ef8: Unmarshalling unknown type code 7209057 at offset 9620
at android.os.Parcel.readValue(Parcel.java:2071)
at android.os.Parcel.readMapInternal(Parcel.java:2288)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getParcelable(Bundle.java:1170)
at android.content.Intent.getParcelableExtra(Intent.java:4525)
at com.*.activity.QRCodeScanResultActivity.onCreate(QRCodeScanResultActivity.java:61)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.access$600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
这很奇怪,因为当应用程序在我的平板电脑(Archos)上启动相同的操作时,我没有任何问题或错误。当我尝试在意图启动的活动中使用intent.getParcelableExtra 获取可打包对象时,问题就出现了。
你可以在下面看到我的 parcelable 类:
public class BeanFDRQRCode implements Parcelable {
public String A_Adresse;
public String A_CDC;
public String A_Code;
public String A_ServeurRH;
public String A_Telephone;
public String D_CodeEmploi;
public String D_Matricule;
public String D_NomPrenom;
public String D_TauxHoraire;
public String D_TauxIK;
public String D_VehImmat;
public String D_VehPTAC;
public String F_ID;
public String F_CodeCouleur;
public String F_Depart;
public String F_Duree;
public String F_Fin;
public String F_Frais;
public String F_No_Annee;
public String F_No_Semaine;
public String F_Numero;
public String F_Numero_Remplacee;
public String F_Poids;
public String F_Rechargement;
public String F_Remuneration;
public String F_Statut;
public String F_CoStatut;
public List<String> F_Taches;
public List<String> F_Secteurs;
public BeanFDRQRCode() {
this.F_Taches = new ArrayList<>();
this.F_Secteurs = new ArrayList<>();
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeString(A_Adresse);
out.writeString(A_CDC);
out.writeString(A_Code);
out.writeString(A_ServeurRH);
out.writeString(A_Telephone);
out.writeString(D_CodeEmploi);
out.writeString(D_Matricule);
out.writeString(D_NomPrenom);
out.writeString(D_TauxHoraire);
out.writeString(D_TauxIK);
out.writeString(D_VehImmat);
out.writeString(D_VehPTAC);
out.writeString(F_ID);
out.writeString(F_CodeCouleur);
out.writeString(F_Depart);
out.writeString(F_Duree);
out.writeString(F_Fin);
out.writeString(F_Frais);
out.writeString(F_No_Annee);
out.writeString(F_No_Semaine);
out.writeString(F_Numero);
out.writeString(F_Numero_Remplacee);
out.writeString(F_Poids);
out.writeString(F_Rechargement);
out.writeString(F_Remuneration);
out.writeString(F_Statut);
out.writeString(F_CoStatut);
out.writeStringList(F_Taches);
out.writeStringList(F_Secteurs);
}
public static final Creator<BeanFDRQRCode> CREATOR = new Creator<BeanFDRQRCode>() {
public BeanFDRQRCode createFromParcel(Parcel in) {
return new BeanFDRQRCode(in);
}
public BeanFDRQRCode[] newArray(int size) {
return new BeanFDRQRCode[size];
}
};
private BeanFDRQRCode(Parcel in) {
A_Adresse = in.readString();
A_CDC = in.readString();
A_Code = in.readString();
A_ServeurRH = in.readString();
A_Telephone = in.readString();
D_CodeEmploi = in.readString();
D_Matricule = in.readString();
D_NomPrenom = in.readString();
D_TauxHoraire = in.readString();
D_TauxIK = in.readString();
D_VehImmat = in.readString();
DISTRI_VehPTAC = in.readString();
F_ID = in.readString();
F_CodeCouleur = in.readString();
F_Depart = in.readString();
F_Duree = in.readString();
F_Fin = in.readString();
F_Frais = in.readString();
F_No_Annee = in.readString();
F_No_Semaine = in.readString();
F_Numero = in.readString();
F_Numero_Remplacee = in.readString();
F_Poids = in.readString();
F_Rechargement = in.readString();
F_Remuneration = in.readString();
F_Statut = in.readString();
F_CoStatut = in.readString();
F_Taches = new ArrayList<>();
in.readStringList(F_Taches);
F_Secteurs = new ArrayList<>();
in.readStringList(F_Secteurs);
}
}
在这里你可以看到我的意图的创建:
Intent intent = new Intent(QRCodeScanActivity.this, QRCodeScanResultActivity.class);
intent.putExtra("BeanFDRQRCode", mBeanFDRQRCode);
intent.putExtra("androidPrincipal", mAndroidPrincipal);
intent.putExtra("beanEnregistrerSignature", beanEnregistrerSignature);
QRCodeScanActivity.this.startActivity(intent);
下面是我如何从额外中获得包裹:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("onCreate", "QRCodeScanResultActivity");
setContentView(R.layout.activity_scan_result);
Intent i = getIntent();
v_BeanFDRQRCode = i.getParcelableExtra("BeanFDRQRCode");
androidPrincipal = i.getParcelableExtra("androidPrincipal");
beanEnregistrerSignature = i.getParcelableExtra("beanEnregistrerSignature");
}
我读过很多类似How to fix Unmarshalling unknown type code XXX at offset YYY in Android?的东西
但我的问题特别突出,因为该应用程序可以在平板电脑(Archos)上运行。
我找不到解决问题的方法,而且我不明白为什么问题取决于设备。
【问题讨论】:
标签: android android-intent serialization unmarshalling parcelable