Android共享首选项不起作用

时间:2013-07-25 08:14:33

标签: android sharedpreferences

我有一个服务,其中有 4个全局静态int变量,我有一个BOOT COMPLETE接收器和Call事件。我想要做的是在执行Call事件接收器时保存这4个变量并在执行BOOT接收器时检索它们(当然,当我重新启动手机时)但两者都不起作用..另一件事是共享首选项是设备重启时也很有用?? 下面给出了代码

    SharedPreferences saved_values = this.getSharedPreferences(
              "com.example.app", Context.MODE_PRIVATE);
    saved_values.edit().putInt("call", MyService.callcount);
    saved_values.edit().putInt("callend",MyService.callendcount);
    saved_values.edit().putInt("network",MyService.network_count);
    saved_values.edit().putInt("ringing",MyService.ringingcount);
    saved_values.edit().commit();

并用于检索

     SharedPreferences saved_values = this.getSharedPreferences(
                  "com.example.app", Context.MODE_PRIVATE);
          MyService.callcount = saved_values.getInt("call", -10);
          MyService.ringingcount=saved_values.getInt("ringing", -10);
          MyService.    network_count=saved_values.getInt("network", -10);
          MyService.        callendcount=saved_values.getInt("callend", -10);

3 个答案:

答案 0 :(得分:23)

我用过它,它对我有用。

保存

SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
 SharedPreferences.Editor editor=saved_values.edit();
     editor.putInt("count",count);
             editor.putInt("foo",foo);
     editor.commit();

并用于检索

     SharedPreferences saved_values = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        count = saved_values.getInt("count", -1);

答案 1 :(得分:13)

问题是每次调用edit()时都会创建一个新的Editor对象。你应该保存一个Editor对象的实例并对其执行所有操作。

使用以下

        SharedPreferences saved_values = this.getSharedPreferences(
                "com.example.app", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=saved_values.edit();
        editor.putInt("call", MyService.callcount);
        editor.putInt("callend", MyService.callendcount);
        editor.putInt("network", MyService.network_count);
        editor.putInt("ringing", MyService.ringingcount);
        editor.commit();

答案 2 :(得分:0)

在看到人们如何应对共享首选项管理(例如编辑,检索以及默认还是自定义)后,我创建了一个开源库,可以很容易地用一行代码保存和检索共享首选项。

public class SimplePrefExample extends Activity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    new SimplePrefs.Builder()
            .setPrefsName("myapppreference")
            .setContext(this)
            .setMode(MODE_PRIVATE)
            .setDefaultUse(false)
            .build();

}

}     创建简单的首选项后,您可以如此轻松地编辑和检索数据。

public class SimplePrefExample extends Activity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SimplePrefs.putInt("myid", 384);
    SimplePrefs.putString("username", "smash");
}

}

该库解决了许多问题,例如检查首选项的可用性等。

您可以在https://github.com/farruhha/SimplePrefs链接中获得详细信息