2017-06-18 84 views
0

保存方法(保存列表是一個ArrayList):保存和讀取的ArrayList

public static void saveList(){ 
    editor.putString("list", Calculate.saveList.toString()); 
} 

我的閱讀方法(可能在我的問題是):

public static void readList(){ 
    String arrayString= prefs.getString("list", null); 
    Calculate.saveList = (ArrayList<String>) Arrays.asList(arrayString.split(",")); 
} 

logcat的錯誤:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tsury.icalorie/com.tsury.icalorie.SavedActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] java.lang.String.split(java.lang.String)' on a null object reference

我需要保存該ArrayList,當然以後再閱讀。

+0

你要確保創建它調用'。適用()'或'.commit()'保存? – frasertmay

+0

這樣做,現在我得到這個錯誤 - java.lang.RuntimeException:無法啓動活動ComponentInfo {com.tsury.icalorie/com.tsury.icalorie.SavedActivity}:java.lang.ClassCastException:java.util.Arrays $ ArrayList不能轉換爲java.util.ArrayList –

+0

我已將我的回覆置於答案 – frasertmay

回答

0

你可以將你的數組列表轉換爲json字符串,並將其保存爲字符串 並讀取該json字符串並將其轉換爲對象。

你可以使用Gson庫來做到這一點。

相關操作步驟:

1在您的搖籃添加此文件扶養

compile 'com.google.code.gson:gson:2.7' 

做出讓您的ArrayList

class MyList{ 
    @SerializedName("myStrings") 
    public ArrayList<String> myStrings; 
} 

類創建MYLIST類的實例,並添加你在myStrings中的值。

MyList myListInstance=new MyList(); 
myList.myStrings.add("Peter"); 
myList.myStrings.add("John"); 
myList.myStrings.add("Faraz"); 

然後使用該行CONVER您MYLIST對象JSON:

String json=new Gson().toJson(myListInstance) 

,並保存在sharedPreferences這個JSON字符串

時要加載數據從sharedPreferences讀你的JSON字符串

和然後將其轉換爲使用此線的對象

MyList myList = new Gson().fromJson(json, MyList.class); 
+0

有沒有這樣做的例子? –

+0

我編輯了我的答案 –

+0

我應該怎麼做:「創建MyList類的實例並在myString中添加字符串值」? –

0

Mak確保您在保存時在編輯器對象上調用.apply().commit()

你也可以不投Arrays.asList()ArrayList,您應該將`editor`對象時與

Calculate.saveList = new ArrayList<String>(Arrays.asList(arrayString.split(",")));