2016-09-18 44 views
1

我有一個Parcelable類,它的數據成員由字符串,整數,布爾值,日期組成,以及由相同類型的東西組成的其他Parcelable對象。儘管如此,樹的末尾只有字符串,整數,布爾值和日期(java.util.Date)。

我有一個@EActivity@Extra被稱爲entity這是這些Parcelable對象之一。

我有一個@EFragment@FragmentArg也稱爲entity以及。當我啓動活動時,我將entity一起傳遞給Activity,並在onCreate中將活動傳遞給該片段。

不過,我得到這個奇怪的例外,那是沒有意義的:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/ 
com.my.app.NavControllerActivity_}: java.lang.IllegalArgumentException: 
    is not a constant in android.text.Layout$Alignment 

我的價值觀都沒有什麼關係android.text.Layout,他們都只是java.lang.String對象。

我把整個堆棧跟蹤以下,但如果它離開我的代碼點是在這裏由Android註釋產生的NavControllerActivity_代碼:

private void injectExtras_() { 
    Bundle extras_ = getIntent().getExtras(); 
    if (extras_!= null) { 
     if (extras_.containsKey(ENTITY_EXTRA)) { // THIS CALL EVENTUALLY LEADS TO THE EXCEPTION 
      this.entity = extras_.getParcelable(ENTITY_EXTRA); 
     } 
     if (extras_.containsKey(ROOT_FRAGMENT_CLASS_EXTRA)) { 
      this.rootFragmentClass = ((Class) extras_.getSerializable(ROOT_FRAGMENT_CLASS_EXTRA)); 
     } 
     if (extras_.containsKey(ROOT_FRAGMENT_NAME_EXTRA)) { 
      this.rootFragmentName = extras_.getString(ROOT_FRAGMENT_NAME_EXTRA); 
     } 
    } 
    setupViews(); 
} 

這裏是我開始練習:

NavControllerActivity_.intent(this) 
    .rootFragmentClass(EditAnimalFragment_.class) 
    .entity(entity) 
    .start(); 

以下是完整的堆棧跟蹤:

FATAL EXCEPTION: main 
Process: com.my.app, PID: 30978 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.app/com.my.app.NavControllerActivity_}: java.lang.IllegalArgumentException: is not a constant in android.text.Layout$Alignment 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.IllegalArgumentException: is not a constant in android.text.Layout$Alignment 
    at java.lang.Enum.valueOf(Enum.java:200) 
    at android.text.Layout$Alignment.valueOf(Layout.java:2017) 
    at android.text.style.AlignmentSpan$Standard.<init>(AlignmentSpan.java:33) 
    at android.text.TextUtils$1.createFromParcel(TextUtils.java:711) 
    at android.text.TextUtils$1.createFromParcel(TextUtils.java:689) 
    at android.os.Parcel.readCharSequence(Parcel.java:1659) 
    at android.os.Parcel.readValue(Parcel.java:2261) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2592) 
    at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
    at android.os.BaseBundle.containsKey(BaseBundle.java:269) 
    at com.my.app.NavControllerActivity_.injectExtras_(NavControllerActivity_.java:87) 
    at com.my.app.NavControllerActivity_.init_(NavControllerActivity_.java:46) 
    at com.my.app.NavControllerActivity_.onCreate(NavControllerActivity_.java:39) 
    at android.app.Activity.performCreate(Activity.java:6237) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
    at android.app.ActivityThread.-wrap11(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5417)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+0

你確定實體只包含字符串嗎?從stracktrace看來,似乎有一個SpannableString的反序列化出錯了。 – WonderCsabo

+0

我將檢查所有包含的Parcelable對象,但是如果在那裏有一個SpannableString,它必須來自除我之外的其他地方。我使用ormlite從數據庫讀取數據到我的對象中,但對於我來說,ormlite會發回SpannableStrings似乎很瘋狂。 –

回答

1

謝謝@W onderCsabo用於質疑我關於我的parcelling代碼和被包裝對象的假設。我做了一些修改問題的代碼修改,這裏是我對於真正出問題的假設。

我犯的錯誤是在我的包裹進/出代碼。我爲包裹寫了20個字段,但從包裹中讀取時,我只讀了15個字段。確保我的代碼與我的代碼相匹配使問題消失。

我認爲發生的事情是,因爲仍然有數據要解壓縮,所以它搞砸了需要解壓的另一個項目,並拋出一個似乎無關的異常。

相關問題