无法在onActivityReenter

时间:2018-06-04 12:06:29

标签: android android-intent bundle parcelable onactivityresult

我想在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 - 包装。它对我没有帮助。

2 个答案:

答案 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!
}