【问题标题】:How to save and load Boolean array Android Studio如何保存和加载布尔数组 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;
    }
}

【问题讨论】:

标签: android android-studio android-intent


【解决方案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 中:

      1. Gson gradle 依赖

        implementation 'com.google.code.gson:gson:2.8.6'
        
      2. 序列化数组

          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}
        
      3. 保存在 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"
        }
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多