我想在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
- 包装。它对我没有帮助。
答案 0 :(得分:1)
对于仍想知道为什么此问题对于以下 Oreo(8)以下版本的API仍然仅存在的人,它与为API 8+提供的修复程序有关。您可以找到官方修补程序here,也可以查看以下代码(从官方存储库中获取):
Intent intent = mEnterActivityOptions.getResultData();
if (intent != null) {
intent.setExtrasClassLoader(activity.getClassLoader());
}
activity.onActivityReenter(result, intent);
从本质上讲,在调用ClassLoader
的{{1}}之前,将Intent
手动添加到Activity
答案 1 :(得分:0)
这有助于我:
override fun onActivityReenter(resultCode: Int, data: Intent?) {
super.onActivityReenter(resultCode, data)
data?.setExtrasClassLoader(this.classLoader) // this is context!
}