我正在开发一个 Android 应用程序,在其中一个部分中,我使用 Intent 从 DatePicker 对话框 fragment 将数据传递回使用 getTargetFragment().onActivityResult(int targetRequestCode, int resultCode, Intent Intent) 创建它的 fragment 。我将从日历 fragment 中提取的三个整数(日期、月份和年份)添加到正在传递的 Intent 中。然后我在创建它的 fragment 的 onActivityResult() 方法中读取了这个 Intent 。一切都按其应有的方式运作,一切都很好,而且世界是一个完美的居住地。
当我尝试调试我犯的一个愚蠢错误时,我注意到一些有趣的事情。当我扩展 Intent 的内容时,我发现我的数据如预期一样位于一个 bundle 中。但我看到 Intent 中还有另一个对象,名为 android.util.ArrayMap,大小为 3。
这个大小似乎与我放入 Intent 中的数据数量相对应(我通过添加额外的虚拟参数对其进行了测试)。当我展开 ArrayMap 的内容时,我看到它抛出 ClassNotFoundException。为什么会这样做呢。键类型是 String ,值类型是 Integer (我输入了一个 int ,但我认为这并不重要,因为我在 String 中添加了键和值,但它仍然抛出异常)。我扩展了 ArrayMap 详细信息,但似乎没有意义。
我的问题是:
- 为什么会发生这个 ClassNotFoundException?
- 首先需要什么 ArrayMap?
最佳答案
您的 putExtra
值保存在 Bundle
的内部数据结构中,该结构恰好是 ArrayMap
这里是its definition, declared in Bundle.java
source
// Invariant - exactly one of mMap / mParcelledData will be null
// (except inside a call to unparcel)
/* package */ ArrayMap<String, Object> mMap = null;
我猜它会将您的 int
转换为更通用的 Object
类。
ClassNotFoundException
可能是 IDE/调试窗口问题,因为这里没有针对此数据结构的任何其他自定义类。另外,你是expected to use package-name prefix in your name
, as mentioned here
The name must include a package prefix, for example the app com.android.contacts would use names like "com.android.contacts.ShowAll".
关于java - Intent 内 android.util.ArrayMap 中的 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348835/