如何保存和加载布尔数组 Android Studio
Posted
技术标签:
【中文标题】如何保存和加载布尔数组 Android Studio【英文标题】:How to save and load Boolean array Android Studio 【发布时间】:2020-02-25 01:10:03 【问题描述】:我正在制作一个带有关卡的安卓游戏。我制作了一个 Button[][] 数组,其中每个 Button 都 setEnabled(false) 除了第一个设置为 true 的按钮,因为它允许玩家开始游戏并“解锁”其他关卡。我存储了一个带有按钮启用状态的全局布尔数组,这样每次我进入“LevelsActivity”时,我都可以读取布尔数组并更新按钮状态。所有这一切都很好。
我的问题是关于如何保存这个布尔数组,以便我可以在应用关闭后加载它。
我阅读了有关 SharedPreferences 的信息,并找到了一些代码,但我无法实现我的目的。此外,我读到 SharedPreferences 不支持该数组,我应该将数组转换为字符串,但我仍然做不到。提前致谢
如果有帮助的话,这是我的 Global 课程:
public class Globals extends Application
private boolean[] array = new boolean[125];
public Globals()
for (int i = 0; i < 125; i++)
array[i] = false;
array[0] = true;
public boolean getData(int i)
return this.array[i];
public void setData(int i, boolean value)
this.array[i]=value;
【问题讨论】:
How to add a Boolean Array in Shared preferences in android的可能重复 【参考方案1】:你不能直接放一个布尔数组,但是你可以为每个级别放一个布尔值。比如:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("level_one", true);
editor.putBoolean("level_two", false);
...
editor.commit();
然后当您进入需要检查这些值的活动时,您可以使用
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();
Boolean level_one = prefs.getBoolean("level_one", false);
Boolean level_two = prefs.getBoolean("level_two", false);
...
【讨论】:
【参考方案2】:我会将它作为 0 和 1 的字符串存储在一个 SharedPrefs 中,然后读回该字符串并根据该字符串填充布尔数组。
SharedPreferences preferences =
getApplicationContext().getSharedPreferences("PREFS", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
// Write
boolean[] array = new boolean[125];
StringBuilder builder = new StringBuilder();
for (boolean i : array)
builder.append(i ? '1' : '0');
editor.putString("BOOLEAN_ARRAY", builder.toString()).apply();
// Read
String arrayPrefs = preferences.getString("BOOLEAN_ARRAY",null);
if(!TextUtils.isEmpty(arrayPrefs))
for(int i = 0; i < array.length;i++)
array[i] = arrayPrefs.charAt(i) == '1';
【讨论】:
【参考方案3】:您可以使用 gson 库来序列化您的数据,然后将其保存在 sharedPref 中:
Gson gradle 依赖
implementation 'com.google.code.gson:gson:2.8.6'
序列化数组
val arrayOfBooleans = arrayOf(false, true, false, true)
// or you could use hashMap which has more readable output after serialization
val mapOfBooleans = mapOf(1 to false, 5 to true)
val serializedJson1 = Gson().toJson(arrayOfBooleans) // [false,true,false,true]
val serializedJson2 = Gson().toJson(mapOfBooleans) // "1":false,"5":true
保存在 SharedPreferences 中
fun saveData(json: String)
val prefManager = PreferenceManager.getDefaultSharedPreferences(context)
prefManager
.edit()
.putString(KEY_OF_DATA, json)
.apply()
companion object
const val KEY_OF_DATA = "keyOfData"
【讨论】:
以上是关于如何保存和加载布尔数组 Android Studio的主要内容,如果未能解决你的问题,请参考以下文章
如何从复选框数组中保存布尔状态并在使用 SharedPreferences 加载适配器时加载它们的状态
Android:如何保存转换为数组值的 EditText 并将它们加载回原位