我在Android代码中遇到了一个奇怪的问题,当我试图将json-smart的
我会得到ClassCastException,因为该方法返回的是普通的HashMap(在JSONArray的情况下是ArrayList)。此外,如果我查看映射/数组内部,内容完全被剥离了任何对JSONObject/JSONArray的引用,并替换为HashMaps/ArrayLists。
我提交了工单并提供了示例项目,但不幸的是作者关闭了它而没有解决方案,所以我只是试图找到问题的根源。如果您转到工单,它附有简单的项目。
有没有办法摆脱这个问题?目前,我必须将JSONObject或JSONArray转换为字符串,并重新解析为对象,例如:
JSONObject
或JSONArray
作为Intent序列化额外数据进行传递时。Json-smart是非常快速和轻量级的JSON解析器实现,我强烈推荐使用它。JSONObject
扩展了HashMap<String,Object>
,而JSONArray
则扩展了带有很少开销的ArrayList<Object>
。这些对象都没有覆盖Object#write
或Object#read
。
问题出在这里:
如果我在Fragment#onSaveInstanceState(String, JSONObject)
中使用这些对象,则一切正常。如果我在普通的Java示例项目中对这些对象进行序列化/反序列化,也能按预期工作。然而,如果我使用Intent#putExtra(String, JSONObject)
,然后尝试通过执行以下操作来获取我的JSONObject:
JSONObject json = (JSONObject) intent.getSerializableExtra("JSON");
我会得到ClassCastException,因为该方法返回的是普通的HashMap(在JSONArray的情况下是ArrayList)。此外,如果我查看映射/数组内部,内容完全被剥离了任何对JSONObject/JSONArray的引用,并替换为HashMaps/ArrayLists。
我提交了工单并提供了示例项目,但不幸的是作者关闭了它而没有解决方案,所以我只是试图找到问题的根源。如果您转到工单,它附有简单的项目。
有没有办法摆脱这个问题?目前,我必须将JSONObject或JSONArray转换为字符串,并重新解析为对象,例如:
JSONArray feeds = (JSONArray) JSONValue.parse(intent.getStringExtra(RAW_FEED));
JSONObject json = new JSONObject(intent.getSerializableExtra("JSON"))
应该可以正常工作。 - Jens