5

ブール値リストを共有設定に保存できない理由を見つけるために何時間も探しています。

メソッドは何かを保存またはロードしていません... 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;
    }
4

2 に答える 2

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 回のコミットではなく 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();
 }

リストを追加する 2 番目の方法

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();
 }

これがうまくいくことを願っています。

于 2013-07-27T09:15:36.427 に答える