该应用程序不记得共享首选项值

时间:2013-09-24 11:23:26

标签: android sharedpreferences

我正在开发一个Android应用程序,该应用程序分为两个男性和女性。用户选择它想要进行的活动的哪个部分。例如,如果用户是男性,则选择男性部分,如果是女性,则单击女性按钮,然后显示女性页面。

为了避免打扰用户,我放了一个复选框,我说下次记得我的选择。很常见......

我尝试使用共享首选项,但它不起作用。每次应用程序打开时它都会询问问题。以下是代码:

我提出问题的活动

View checkBoxView = View.inflate(this, R.layout.activity_menu, null);
    CheckBox checkBox = (CheckBox) checkBoxView.findViewById(R.id.checkbox);
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                SharedPreferences.Editor prefEditor = getPreferences(MODE_PRIVATE).edit();
                prefEditor.putString("Remember", "Checked");
                prefEditor.commit();
            }
        }
});

决定提问或打开所选活动之前的启动活动

SharedPreferences sp = getPreferences(MODE_PRIVATE);
                    String str1 = sp.getString("Remember", "");
                    String str2 = sp.getString("Hacc", "");

                    if (str1 == "") {
                        Intent menuIntent = new Intent(
                                "com.uygulama.hacc.MenuActivity");
                        startActivity(menuIntent);
                    }
                    else{
                        if(str2 == "Hacc" ){
                            Intent mainIntent = new Intent(
                                    "com.uygulama.hacc.HaccActivity");
                            startActivity(mainIntent);
                        }
                        else{
                            Intent mainIntent = new Intent(
                                    "com.uygulama.hacc.UmreActivity");
                            startActivity(mainIntent);
                        }
                    }

我是Android的新手,所以,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我猜你正在使用2种不同的活动来编写和阅读共享偏好。如果您从getPreferences致电Activity,则会打开与该活动相关联的偏好设置。尝试将对首选项的访问权限更改为:

// read
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String str1 = settings.getString("Remember", "");

// write
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = settings.edit();
editor.putString("Remember", "Checked");
editor.commit();

此外,在比较字符串时,请使用equals

str2.equals("Hacc")

否则你比较参考。

答案 1 :(得分:1)

您应该使用共享首选项而不是getPreferences来共享活动之间的首选项。

来自Android doc: http://developer.android.com/reference/android/app/Activity.html

  

使用该方法管理活动持久状态   getPreferences(int),允许您检索和修改一组   与活动关联的名称/值对。要使用偏好   在多个应用程序组件之间共享(活动,   接收者,服务,提供者),你可以使用底层   Context.getSharedPreferences()方法用于检索首选项对象   以特定名称存储。 (请注意,无法共享   跨应用程序包设置数据 - 为此你需要一个   内容提供商。)

答案 2 :(得分:0)

您在第一堂课中的保存缺少了SharedPreferences中的命名空间。

尝试类似:

SharedPreferences prefs = getSharedPreferences("AppName", MODE_PRIVATE);
prefs.edit().putBoolean("Remember", true).commit();

并使用以下命令检索它:

SharedPreferences sPrefs = getSharedPreferences("AppName", 0);
Boolean bCheck = sPrefs.getBoolean("Remember", false);