我正在开发一个Android应用程序,并且在其中一部分中,我使用Intent将数据从DatePicker对话框片段传递回使用getTargetFragment()。onActivityResult(int targetRequestCode,int resultCode,Intent intent)创建它的片段。我将从Calendar片段中提取的三个整数(日期,月份和年份)添加到要传递的意图中。然后,我在创建它的片段的onActivityResult()方法中阅读了此意图。一切正常,一切都很好,花花公子,这个世界是一个理想的生活场所。

当我尝试调试一个愚蠢的错误时,我注意到了一些有趣的东西。当我扩展意图的内容时,我发现我的数据与预期的一样在一个捆绑包中。但是我看到在意图中还有另一个对象名为android.util.ArrayMap,大小为3。



这个大小似乎对应于我输入的数据数量(我通过添加其他虚拟参数对其进行了测试)。当我扩展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".

08-04 06:40