我在Android代碼中遇到一個奇怪的問題,當我試圖將Json-smart JSONObject
或JSONArray
作爲可序列化數據傳遞給Intent serializable extra時。 Json-smart是非常快速和精益的JSON解析器實現,我強烈推薦它。 JSONObject
延伸HashMap<String, Object>
和JSONArray
延伸ArrayList<Object>
與很少的開銷。這些對象的虛空覆蓋Object#write
或Object#read
Android - json-smart反序列化問題
這裏的問題:
如果我用說Fragment#onSaveInstanceState(String, JSONObject)
一切工作就好了這些對象。如果我在普通的Java示例項目中序列化/反序列化這些對象,它再次按預期工作。但是,如果我用Intent#putExtra(String, JSONObject)
,然後嘗試做
JSONObject json = (JSONObject) intent.getSerializableExtra("JSON");
讓我的JSONObject我會得到ClassCastException
因爲什麼方法返回的是一個普通的HashMap
(JSONArray,並在情況下,它的ArrayList)。此外,如果我看地圖/陣列中的內容被完全剝離到的JSONObject/JSONArray任何引用,幷包含HashMap /的ArrayList
我filed the ticket更換和提供的示例項目,但遺憾的是筆者關閉了它,但未得到解決,所以我乾脆試圖達到它的底部。如果你去的票,它有簡單的項目附加。
有沒有辦法呢?現在我要的JSONObject或JSONArray轉換爲字符串,並重新分析這回對象,如:
JSONArray feeds = (JSONArray) JSONValue.parse(intent.getStringExtra(RAW_FEED));
fyi,'JSONObject json = new JSONObject(intent.getSerializableExtra(「JSON」))'應該只是花花公子。 – Jens
@Jens這不起作用(至少完全)。是的 - 你會得到外部JSONObject,但所有內部結構將是純HashMaps和ArrayLists。我只是通過修改和執行門票 – Bostone
中包含的測試項目來驗證這一點。 JSON對象可以從HashMap構建,實際上是一個HashMap。 –