0

我正在使用TreeMap,因爲它是存儲我需要的信息的最高效的數據結構。我必須能夠保留TreeMap以供將來使用,那麼我有沒有辦法將它存儲在一個對象中,也許在這樣做之前序列化它?如何序列化TreeMap並將其插入到SharedPreferences?

我知道這種方法here,但使用Apache Pig項目中的ObjectSerializer會導致Eclipse崩潰。當我運行的應用程序,在底部的狀態欄永遠不會過去的「啓動[應用程序名稱] 100%」的消息,直到它引發以下錯誤消息:

Unable to execute dex: Java heap space 
Unhandled event loop execution 

有什麼我可以做存儲共享首選項中的TreeMap?

回答

3

如果您想序列化/反序列化,您可以將TreeMap序列化爲JSON格式作爲字符串對象,然後存儲它,無論您想存儲它。稍後,您將能夠從JSON格式反序列化它。

你可以使用着名的傑克遜庫作爲傑克遜庫是行業標準,是免費的。請參閱http://wiki.fasterxml.com/JacksonHome

編輯:JSON格式還確保您可以讀取其他程序中的持久數據,因爲它會非常易讀。不確定Jackson JSON庫是否適用於Android。如果在android中找到其他一些JSON庫。

+0

不知道我是否正確理解你 - 你的意思是,而不是使用TreeMap,以JSON格式存儲我的數據,並將它作爲字符串從共享首選項中存儲/檢索(這樣,不再需要序列化/反序列化)?因爲我可能會丟失數據的排序順序,這就是爲什麼我首先使用TreeMap的原因。 –

+0

不,您只使用TreeMap。但是,當存儲到SharedPrefrences中時,將其轉換爲JSON格式。當你從共享首選項中讀取它時,你從那裏讀取並將其轉換回TreeMap。 –

+0

代碼的邏輯將是這樣的。要序列化:prefs.edit()。putString(key,toJSONString(treemap))。反序列化:TreeMap treemap = new TreeMap((Map)fromJson(prefs.edit()。getString(key))) –

相關問題