无法从 onActivityReenter 中的 Intent 读取 Parcelable
Cannot read Parcelable from Intent in onActivityReenter
我想 return 我的地址模型作为 Intent
的结果。如果我尝试在 onAcivityResult
方法中获取我的地址模型一切正常,但在 onActivityReenter
中我得到了这个 Exception
:
Class not found when unmarshalling: ua.com.uklontaxi.models.UIAddress
java.lang.ClassNotFoundException: ua.com.myapp.models.UIAddress
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2383)
at android.os.Parcel.readParcelable(Parcel.java:2337)
at android.os.Parcel.readValue(Parcel.java:2243)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2592)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.Bundle.getParcelable(Bundle.java:786)
其他地方没有这样的错误(比如onActivityResult
在同一个Activity
)
如何解决?
P.S。我把我的模型放到 Bundle
然后我把这个包放到 Intent
。我尝试将地址放入 Intent
而没有 Bundle
-wrapping。它对我没有帮助。
这对我有帮助:
override fun onActivityReenter(resultCode: Int, data: Intent?) {
super.onActivityReenter(resultCode, data)
data?.setExtrasClassLoader(this.classLoader) // this is context!
}
对于仍然想知道为什么这个问题仍然存在的人 仅 对于 API 版本 低于 奥利奥 (8),它必须使用为 API 8+ 提供的修复程序。您可以找到官方修复 here 或者您可以查看以下代码(取自官方 repo):
Intent intent = mEnterActivityOptions.getResultData();
if (intent != null) {
intent.setExtrasClassLoader(activity.getClassLoader());
}
activity.onActivityReenter(result, intent);
它本质上是在调用 Activity
的 onActivityReenter(...);
之前手动将 ClassLoader
添加到 Intent
我想 return 我的地址模型作为 Intent
的结果。如果我尝试在 onAcivityResult
方法中获取我的地址模型一切正常,但在 onActivityReenter
中我得到了这个 Exception
:
Class not found when unmarshalling: ua.com.uklontaxi.models.UIAddress
java.lang.ClassNotFoundException: ua.com.myapp.models.UIAddress
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2383)
at android.os.Parcel.readParcelable(Parcel.java:2337)
at android.os.Parcel.readValue(Parcel.java:2243)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2592)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.Bundle.getParcelable(Bundle.java:786)
其他地方没有这样的错误(比如onActivityResult
在同一个Activity
)
如何解决?
P.S。我把我的模型放到 Bundle
然后我把这个包放到 Intent
。我尝试将地址放入 Intent
而没有 Bundle
-wrapping。它对我没有帮助。
这对我有帮助:
override fun onActivityReenter(resultCode: Int, data: Intent?) {
super.onActivityReenter(resultCode, data)
data?.setExtrasClassLoader(this.classLoader) // this is context!
}
对于仍然想知道为什么这个问题仍然存在的人 仅 对于 API 版本 低于 奥利奥 (8),它必须使用为 API 8+ 提供的修复程序。您可以找到官方修复 here 或者您可以查看以下代码(取自官方 repo):
Intent intent = mEnterActivityOptions.getResultData();
if (intent != null) {
intent.setExtrasClassLoader(activity.getClassLoader());
}
activity.onActivityReenter(result, intent);
它本质上是在调用 Activity
的 onActivityReenter(...);
ClassLoader
添加到 Intent