由于实体类intent传递我几乎都用Serializable而没怎么用过Parcelable,今天碰到一个崩溃问题
传值的地方
Intent intentPerson = new Intent();
intentPerson.putExtra("uuid", sfuuid);
if (null != person) {
intentPerson.putExtra("person", person);
}
intentPerson.setClass(context, BasicInfoInputActivity.class);
startActivity(intentPerson);
接收的地方
Intent intent = getIntent();
if (intent != null) {
temp = intent.getStringExtra("temp");
if ("InfoListActivity".equals(temp)) {
Log.d(TAG, "InfoListActivity编辑回显身份证号码" + intent.getStringExtra("card"));
String card = intent.getStringExtra("card");
uuid = intent.getStringExtra("uuid");
if (!StringConstant.ONLINE) {
person = intent.getParcelableExtra("person");
FATAL EXCEPTION: main
Process: com.sunthink.healthrecords, PID: 1881
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sunthink.healthrecords/com.sunthink.healthrecords.activity.BasicInfoInputActivity}: java.lang.RuntimeException: Parcel android.os.Parcel@39f00385: Unmarshalling unknown type code 6553705 at offset 888
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@39f00385: Unmarshalling unknown type code 6553705 at offset 888
at android.os.Parcel.readValue(Parcel.java:2228)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getInt(BaseBundle.java:794)
at android.content.Intent.getIntExtra(Intent.java:5091)
at com.sunthink.healthrecords.activity.BasicInfoInputActivity.onCreate(BasicInfoInputActivity.java:407)
at android.app.Activity.performCreate(Activity.java:6033)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
保存原因就是intent传值的时候如果用Parcelable+别的数据的时候必须用bundle,不然就会报以上的错误
当然Parcelable传值崩溃还有可能是读写顺序的问题,好在现在有一键生成的插件这个问题也就不复存在了