Parcelable傳值崩潰問題

 由於實體類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傳值崩潰還有可能是讀寫順序的問題,好在現在有一鍵生成的插件這個問題也就不復存在了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章