2013-07-27 66 views
5

我在搜索幾小時以查明共享偏好設置中保存布爾列表的原因無效。在共享偏好設置中保存ArrayList

該方法沒有保存或加載某些東西... loadmethod總是返回替代值:所以list_size爲0,布爾值爲false。

首先,我在我的MainActivity創建列表和調用Save方法:

SaveLoadTraining sLoad = new SaveLoadTraining(); 
    ArrayList<Boolean> listBoolTrain = new ArrayList<Boolean>(); 
    listBoolTrain.add(true); 
    listBoolTrain.add(true); 
    sLoad.saveArray(listBoolTrain); 

子類SaveLoadTraining看起來是這樣的:

package de.sebspr.app08.halle; 

import java.util.ArrayList; 

import android.content.Context; 
import android.content.SharedPreferences; 
import de.sebspr.app08.MainActivity; 

public class SaveLoadTraining { 

    private Context context; 
    public static final String PREFS_NAME = "ListFile"; 
    private ArrayList<Boolean> list; 

    public SaveLoadTraining(){ 
     this.context = MainActivity.getMContext(); 
    } 

    public void saveArray(ArrayList<Boolean> list){ 

     this.list = list; 

     SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 

     int size = list.size(); 
     editor.putInt("list_size", size); 

     for (int i = 0; i < size; i++) { 
      editor.remove("list_"+i); 
     } 
     for (int i = 0; i < size; i++) { 
      editor.putBoolean("list_"+i, list.get(i)); 
     }  
     editor.commit(); 
    } 

    public ArrayList<Boolean> loadArray(){ 

     SharedPreferences file = context.getSharedPreferences(PREFS_NAME, 0); 
     list = new ArrayList<Boolean>(); 
     int size = file.getInt("list_size", 0); 

     for(int i = 0; i<size;i++){ 
      boolean bool = file.getBoolean("list_"+i, false); 
      list.add(bool); 
     } 
     return list; 
    } 
} 

我想不出什麼錯誤...

也許我以錯誤的方式處理上下文? 我只是調用這個方法來獲得在MainActivity的背景:

... 
mContext = this; 
... 
    public static Context getMContext(){ 
     return mContext; 
    } 
+2

'我想不出什麼錯誤...' - 我們也不能因爲你還沒有告訴我們;) – Simon

+0

EHM,嘿嘿;) 方法並不保存或加載東西.. 。loadmethod總是返回替代值:所以list_size爲0,布爾值爲false – Bolic

+0

我剛剛複製了你的代碼,它適用於我。請顯示您正在加載並保存的位置或您正在測試的方式。 –

回答

3

只需做如下改變你的代碼,它應該工作。 以SharedPrefrences mSharedPrefs作爲您的類變量。

public class SaveLoadTraining 
{ 
private Context context; 
public static final String PREFS_NAME = "ListFile"; 
private ArrayList<Boolean> list; 
private SharedPreferences mSharedPrefs; 

public SaveLoadTraining(){ 
    this.context = getApplicationContext(); 
    mSharedPrefs = context.getSharedPreferences(PREFS_NAME, 0); 
} 

製作2個不同的去除和增加值,以共享偏好和方法做它在兩次提交,而不是1提交。

去除列表

public void removeArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

int size = list.size(); 

    for (int i = 0; i < size; i++) { 
     editor.remove("list_"+i); 
    } 
    editor.commit(); 
} 

第二個方法添加列表

public void addArray(ArrayList<Boolean> list) 
{ 
SharedPreferences.Editor editor = mSharedPrefs.edit(); 

    int size = list.size(); 
    editor.putInt("list_size", size); 

    for (int i = 0; i < size; i++) { 
     editor.putBoolean("list_"+i, list.get(i)); 
    }  
    editor.commit(); 
} 

第1種方法,我希望這會工作。

+0

我想出了錯誤。這是我的代碼中的某處。所以代碼工作很好,我張貼。 Neverless ...謝謝;-) – Bolic

+0

@Bolic沒問題隊友:) –

+0

@SalmanAyub我想保存/存儲列表在共享首選項我該怎麼做?我想要保存列表的字符串我想存儲完整的數組列表在SharedPreferences – Erum

1
public static boolean saveArrayList() 
{ 

SharedPreferences sp = SharedPreferences.getDefaultSharedPreferences(this); 
SharedPreferences.Editor mEdit1 = sp.edit(); 
mEdit1.putInt("Status_size", sKey.size()); /* sKey is an array List*/ 

    for(int i=0;i<sKey.size();i++) 
    { 
    mEdit1.remove("Status_" + i); 
    mEdit1.putString("Status_" + i, sKey.get(i)); 
    } 

    return mEdit1.commit();  
} 

**Loading Array Data from Shared Preferences** 

public static void loadArrayList(Context mContext) 
{ 
    Shared Preferences mSharedPreference1 = PreferenceManager.getDefaultSharedPreferences(mContext); 
    sKey.clear(); //skey is arraylist 
    int size = mSharedPreference1.getInt("Status_size", 0); 

    for(int i=0;i<size;i++) 
    { 
     sKey.add(mSharedPreference1.getString("Status_" + i, null)); //skey is arraylist 
    } 
}