无法从 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);

它本质上是在调用 ActivityonActivityReenter(...);

之前手动将 ClassLoader 添加到 Intent