2011-08-29 64 views
4

是否可以將整個數組(甚至是ArrayList)保存到android應用程序數據中?Android:將數組保存到應用程序數據

據我所知,你只能做像putInt,putBoolean或putString的東西.... 但是更復雜的數據類型呢? 有沒有辦法做到這一點?

或者我必須首先將整個數組轉換爲字符串,然後在加載時再次將其解析爲數組?

回答

2

複雜數據類型使用

  Bundle bundle = new Bundle(); 
      bundle.putSerializable("key", object); 
      intent.putExtra("bundle", bundle); 

編輯:或陣列,可以使用

putStringArray(key,value); 
+2

這如何適用於保存應用數據,例如SharedPreferences? –

+0

putStringSet(String key,Set values) 在首選項編輯器中設置一組String值,以便在調用commit()時寫回。 [SharedPreferences.Editor](http://developer.android.com/reference/android/content/SharedPreferences.Editor.html) – user370305

+0

據我所知,這只是用sharedpreferences播放字符串的方法.. – user370305

1

我覺得你不知道還有這樣的函數putFloatArray(key,Value),putStringArray(key,value)。你可以使用這些函數。

+0

這是如何適用於保存應用程序數據,例如SharedPreferences? –

+0

謝謝。我有一個ArrayList 雖然:-P 是否存在一個優雅的方式來存儲它作爲一個字符串數組? – RazorHail

1

如果 「應用程序數據」 你的意思是SharedPreferences,則沒有,你只save simple types即可。

但是,您可以在此描述通過活動onSaveInstanceState/onRestoreInstanceState保存應用程序狀態:Saving Android Activity state using Save Instance State

注意,這樣可以節省狀態每次活動,所以最好有下保存應用程序狀態的主要活動。

+0

哇,所以我只是必須調用super.onSaveInstanceState和super.onRestoreInstanceState。一切都將被保存並自動加載? – RazorHail

+0

不,你只需要在你的Activity中實現這些方法,它們就會自動調用。不需要手動調用。查看鏈接。 –

+0

噢,那麼這對我真的沒有幫助,是嗎? :) 我希望能夠保存更復雜的數據類型。這些方法只是被稱爲保存和加載的方法。但如何(和哪裏)我實際上保存一個對象? – RazorHail

0

您可以serialize幾乎任何形式的數據,並將其保存爲一個字節流byte[]

系列化後,存儲與:

putByteArray("key", serializedData); 
0

您需要實現Parcelable。你應該看看這個教程Passing ArrayList across activities

+0

但這隻適用於當我想將對象轉移到另一個活動時,對嗎? 它不保存任何東西,是嗎? – RazorHail

+0

對不起,我誤解了你的問題。 Parcelable對於跨活動或流程傳遞數據非常有用。 – hleroy

+0

如果您的數組包含基元類型,請遍歷它並將其保存在SharedPreferences中。如果數組或ArrayList更復雜,則將其序列化爲base64字符串(請參閱http://stackoverflow.com/questions/134492/how-to-serialize-an-object-into-a-string)並將其另存爲字符串在SharedPreference中。如果您的ArrayList真的很大,請考慮使用其他形式的持久性存儲(寫入本地文件或使用SQLite) – hleroy