gpt4 book ai didi

android - 将 ArrayList 保存在共享首选项中

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:46:51 24 4
gpt4 key购买 nike

我花了几个小时来找出为什么在共享首选项中保存 bool 列表不起作用。

这些方法不会保存或加载某些东西...加载方法总是返回替代值:因此 list_size 为 0, bool 值为 false。

首先,我在 MainActivity 中创建列表并调用保存方法:

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

最佳答案

只需在您的代码中进行以下更改,它就会起作用。将 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();
}

我希望这会奏效。

关于android - 将 ArrayList 保存在共享首选项中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17895888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com