无法从 onActivityReenter 中的 Intent 读取 Parcelable
Posted
技术标签:
【中文标题】无法从 onActivityReenter 中的 Intent 读取 Parcelable【英文标题】:Cannot read Parcelable from Intent in onActivityReenter 【发布时间】:2018-11-13 18:26:11 【问题描述】:我想在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
)
如何解决?
附:我把我的模型放到Bundle
,然后我把这个包放到Intent
。我尝试在没有Bundle
-wrapping 的情况下将地址放入Intent
。这对我没有帮助。
【问题讨论】:
请发布更多堆栈跟踪。哪里出错了? 【参考方案1】:这对我有帮助:
override fun onActivityReenter(resultCode: Int, data: Intent?)
super.onActivityReenter(resultCode, data)
data?.setExtrasClassLoader(this.classLoader) // this is context!
【讨论】:
【参考方案2】:对于仍然想知道为什么这个问题仅对于 API 版本低于 Oreo (8) 仍然存在的人,它与为 API 8+ 提供的修复有关。您可以找到官方修复 here 或者您可以查看以下代码(取自官方 repo):
Intent intent = mEnterActivityOptions.getResultData();
if (intent != null)
intent.setExtrasClassLoader(activity.getClassLoader());
activity.onActivityReenter(result, intent);
本质上,在调用Activity
的onActivityReenter(...);
之前,手动将ClassLoader
添加到Intent
中
【讨论】:
以上是关于无法从 onActivityReenter 中的 Intent 读取 Parcelable的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Flutter 中的 Firebase Firestore 返回列表
无法从 UITest 中的 CollectionView 元素访问单元格