2

我的应用程序出现奇怪的问题。我已经设置了一个 SharedPreference,像这样

SharedPreferences prefs = PreferenceManager
                .getDefaultSharedPreferences(this);
        flag = prefs.getBoolean("handle_calls", false);
        if (flag) {
            SharedPreferences.Editor editor = prefs.edit();
            editor.clear();
            editor.putBoolean("checkFlag", true);
            editor.commit();
        }

几天前它工作正常,但现在这段代码工作正常,但是当我尝试在我的 SmsReceiver 类中读取这些首选项时,SharedPreferences没有读取这些值并且读取了默认值(假)......有时它工作并且大部分时间它根本不起作用!这是我阅读的方式SharedPreferences

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SmsManager sms = SmsManager.getDefault();

    //flag = prefs.getBoolean("handle_calls", false);
    checkFlag = prefs.getBoolean("checkFlag", false);
    checkDecisionFlag = prefs.getBoolean("checkDecisionFlag", false);

checkDecisionFlag工作正常,但 checkFlag 采用默认值。

真的生气了!请帮忙!

4

3 回答 3

2

删除 editor.clear(); 从 if 条件。as clear 将清除 SharedPreference 中的所有数据。

 if (flag) {
        SharedPreferences.Editor editor = prefs.edit();

        editor.putBoolean("checkFlag", true);
        editor.commit();
    }
于 2012-05-20T17:38:10.563 回答
1

解决了!这段代码很好,但问题在于面向生命周期。我有另一个SharedPreference,这取决于。那是一次又一次的虚假。

于 2012-08-25T17:42:41.547 回答
0

我认为您想在第一个代码示例的第三行使用 if (!flag) ( not flag) 。

于 2012-05-20T17:38:51.327 回答