Android 注释,Parcelable 对象作为 Extra,产生 IllegalArgumentException: is not a constant in android.text.Layout$Alignment
Android Annotations, Parcelable object as Extra, producing IllegalArgumentException: is not a constant in android.text.Layout$Alignment
我有一个 class 是 Parcelable,它的数据成员由字符串、整数、布尔值、日期和其他由相同类型的东西组成的 Parcelable 对象组成。不过在树的末尾,只有字符串、整数、布尔值和日期 (java.util.Date)。
我有一个 @EActivity
和一个名为 entity
的 @Extra
,它是这些 Parcelable 对象之一。
我有一个 @EFragment
和一个 @FragmentArg
也叫 entity
。当我启动 Activity 时,我将 entity
传递给 Activity,在 onCreate
中,activity 将它传递给片段。
但是,我得到了这个毫无意义的奇怪异常:
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
我的 None 个值与 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();
}
以下是我启动 activity 的方式:
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.createFromParcel(TextUtils.java:711)
at android.text.TextUtils.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)
感谢@WonderCsabo 质疑我对包裹代码和包裹对象的假设。我做了一些代码更改来解决问题,这是我对真正出错的假设。
我犯的错误是在我的 Parcel in/out 代码中。我正在向 Parcel 写入 20 个字段,但是从 Parcel 读取时我只读取了 15 个字段。确保我的输入代码与我的输出代码相匹配,问题就消失了。
我认为发生的事情是因为仍然有数据要解包,所以它搞砸了另一个需要解包的项目并抛出一个似乎无关的异常。
我有一个 class 是 Parcelable,它的数据成员由字符串、整数、布尔值、日期和其他由相同类型的东西组成的 Parcelable 对象组成。不过在树的末尾,只有字符串、整数、布尔值和日期 (java.util.Date)。
我有一个 @EActivity
和一个名为 entity
的 @Extra
,它是这些 Parcelable 对象之一。
我有一个 @EFragment
和一个 @FragmentArg
也叫 entity
。当我启动 Activity 时,我将 entity
传递给 Activity,在 onCreate
中,activity 将它传递给片段。
但是,我得到了这个毫无意义的奇怪异常:
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
我的 None 个值与 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();
}
以下是我启动 activity 的方式:
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.createFromParcel(TextUtils.java:711)
at android.text.TextUtils.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)
感谢@WonderCsabo 质疑我对包裹代码和包裹对象的假设。我做了一些代码更改来解决问题,这是我对真正出错的假设。
我犯的错误是在我的 Parcel in/out 代码中。我正在向 Parcel 写入 20 个字段,但是从 Parcel 读取时我只读取了 15 个字段。确保我的输入代码与我的输出代码相匹配,问题就消失了。
我认为发生的事情是因为仍然有数据要解包,所以它搞砸了另一个需要解包的项目并抛出一个似乎无关的异常。