2017-10-09 56 views
-1

我是Android新手,我嘗試完成我的第一個Android應用程序。我有一個strings列表(我已經適應了listview),我通過按不同的按鈕添加不同的字符串。問題是,當應用程序關閉時,數組列表丟失了所有的數據,並且我已經閱讀了sharedpreferences類可以解決這個問題。我試過了,我找回了數組列表,但沒有使用與當我保存它。那麼,我怎樣才能以相同的順序檢索數組列表? 在此先感謝!如何使用共享首選項保存並檢索具有相同順序的字符串數組列表

+0

您保存那些arraylist爲什麼?串?地圖? – ZeroOne

+0

Sqlite是(對我來說)更容易和有組織。我知道'SharedPreferences'很容易實現,但至少看看sqlite。 –

+3

[從共享首選項中獲取和獲取字符串數組]可能的重複(https://stackoverflow.com/questions/7965290/put-and-get-string-array-from-shared-preferences) – petey

回答

1

如果您真的對使用SharedPreferences而不是數據庫這樣做感興趣,可以嘗試使用它們在陣列上的位置作爲首選項文件上的鍵保存字符串。

可以實現與下面的代碼片段:

private String prefName = "preferences"; 


/** 
* Save the arraylist of Strings in a preferences file. 
*/ 
public void saveArray(Context context, ArrayList<String> myArray) { 
    SharedPreferences sharedPref = context.getSharedPreferences(prefName,Context.MODE_PRIVATE); 
    Editor editor = sharedPref.edit(); 

    for (int i = 0; i < myArray.size(); i++) { 
     editor.putString(String.valueOf(i), myArray.get(i)); 
    } 

    editor.commit(); 
} 

/** 
* Reads the saved contents in order. 
*/ 
public ArrayList<String> readArray(Context context) { 
    SharedPreferences sharedPref = context.getSharedPreferences(prefName,Context.MODE_PRIVATE); 
    Editor editor = sharedPref.edit(); 

    int size = sharedPref.getAll().size(); 
    ArrayList<String> ret = new ArrayList<>(); 

    for (int i = 0; i < myArray.size(); i++) { 
     ret.add(i,sharedPref.getString(String.valueOf(i))); 
    } 

    return ret; 
} 

偏好文件應該是這個樣子:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
    <string name="0">My String</string> 
    <string name="1">My second String</string> 
</map> 
+0

readArray中的for循環會不適合我。放置方法不適用。對不起,如果我不明白這一點! – dimt172z

+0

行動,我的壞。這是「添加」,而不是「放」 – Mauker

1

最簡單的方式保存在sharedpreferences ArrayList的是把它轉換成JSON和100%以相同的順序,當你得到它

String list = new Gson().toJson(your_list); 
shared.putString("KEY", list).apply(); 

然後,將其轉換回

List<Object> list = new Gson().fromJson(jsonString, new TypeToken<ArraList<Object>>(){}.getType()); 
+0

謝謝,我也試過你的方法,也很好。 – dimt172z

相關問題