安卓共享首选项无法工作

14

我有一个服务,其中有4个全局静态整数变量,我有一个接收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);

请问您能否上传 BroadCastRecevier 的代码? - Vigbyor
实际上,我正在接收器中启动另一个新的意图服务,并在其中执行此操作。在Onhandleintent()函数中。 - Ateeq
3个回答

26
我用过这个,对我有用。 为节省。
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);

4
谢谢您发布这篇文章。直接使用SharedPreferences不能按预期工作。 - SQLiteNoob

14

问题在于每次调用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();

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中获取详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接