Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio SharedPreferences的布尔和if条件_Java_Android_Checkbox_Sharedpreferences - Fatal编程技术网

Java Android Studio SharedPreferences的布尔和if条件

Java Android Studio SharedPreferences的布尔和if条件,java,android,checkbox,sharedpreferences,Java,Android,Checkbox,Sharedpreferences,任务: -单击保存按钮时:将复选框的布尔值保存到SharedReferences。 -在应用程序启动时,检查SharedReferences值是否为true,如果为true,请选中复选框 我不确定上面哪一部分我错了,所以我把整件事都告诉你。(在网上搜索了很多次,并试图解决这一问题达数天之久,请原谅我的新手城市) MainActivity.java public class MainActivity extends AppCompatActivity { boolean ever_save

任务: -单击保存按钮时:将复选框的布尔值保存到SharedReferences。 -在应用程序启动时,检查SharedReferences值是否为true,如果为true,请选中复选框

我不确定上面哪一部分我错了,所以我把整件事都告诉你。(在网上搜索了很多次,并试图解决这一问题达数天之久,请原谅我的新手城市)

MainActivity.java

public class MainActivity extends AppCompatActivity {
    boolean ever_saved_settings=false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String if_settings= String.valueOf(ever_saved_settings);
    if(if_settings.equals("true")) {
        SharedPreferences Saved_Settings = getPreferences(MODE_PRIVATE);
        String PU2 = Saved_Settings.getString("PU", null);
        if (PU2=="true")
            chk_box_PU.setChecked(true);
            else
            chk_box_PU.setChecked(false);

    }

public void save_settings(View v) {
    ever_saved_settings=true;
    CheckBox chk_box_PU = (CheckBox) findViewById(R.id.chk_box_PU);
    String PU_value = (String) chk_box_PU.getText();
    SharedPreferences Saved_Settings = this.getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = Saved_Settings.edit();
    prefsEditor.putString("PU", PU_value);
    prefsEditor.commit();
}
}
编辑

以下是/xml,以防问题不在活动中。对新手来说很少见但可能:}

工具栏\保存\按钮.xml

<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:orientation="horizontal">


<Button
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:text="@string/save_button"
    android:textSize="24dp"
    android:onClick="save_settings"/>

其中包括: home.xml


[...]
whish包括在: activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="@drawable/back_0"
tools:context=".MainActivity">
[...]
<include layout="@layout/home"/>
[...]
</LinearLayout>

[...]
[...]
在android手机中运行.apk时,该按钮看起来很好,当您单击它时,它会“闪烁”。

尝试以下操作:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    SharedPreferences Saved_Settings = getPreferences("Saved_Settings", MODE_PRIVATE);
    boolean PU2 = Saved_Settings.getBoolean("PU", false);

    // no need to check with if conditions. just set the button with the value(PU2)
    chk_box_PU.setChecked(PU2);

}

public void save_settings(View v) {
    CheckBox chk_box_PU = (CheckBox) findViewById(R.id.chk_box_PU);
    SharedPreferences Saved_Settings = this.getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = Saved_Settings.edit();
    prefsEditor.putBoolean("PU", chk_box_PU.isChecked());
    prefsEditor.commit();
}

我认为您缺少首选项名称:

   SharedPreferences Saved_Settings = getPreferences(MODE_PRIVATE);
改为:

   SharedPreferences Saved_Settings = getPreferences("Saved_Settings", MODE_PRIVATE);
在onCreate()中 改变这个

SharedPreferences Saved_Settings = getPreferences(MODE_PRIVATE);


而这个
if(PU2==“true”)
if(PU2.equals(“true”))
1。您不需要这个变量:

boolean ever_saved_settings=false;
每次启动应用程序时,此变量都设置为false。 此外,如果设置不存在,您也不会得到任何错误,因此变量是无用的


2.您的产品线

if (PU2=="true")
将始终返回false。在这一行中,您比较的是指针,而不是值

始终以这种方式使用:

if (PU2.equals("true"))

3.为什么要将布尔值存储在字符串中,并将它们作为字符串进行比较

您可以比较布尔变量,例如:

boolean variable = true;
if (variable) {
    // do your stuff
}

4.以下是您应该如何实施它:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences Saved_Settings = getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    chk_box_PU.setChecked(Saved_Settings.getBoolean("PU", false));
}

public void save_settings(View v) {
    CheckBox chk_box_PU = (CheckBox) findViewById(R.id.chk_box_PU);

    SharedPreferences Saved_Settings = getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = Saved_Settings.edit();

    prefsEditor.putBoolean("PU", chk_box_PU.isChecked());

    prefsEditor.apply();
}}

在应用程序启动时,您曾经保存的设置将始终为false。您的问题(PU2==“true”)为什么需要将布尔值转换为字符串?将SharedReferences get boolean默认值替换为false即可。不起作用。反正是thnx。我会尝试其他答案,我会编辑帖子添加.xml,以防万一…效果很好。感谢您的评论,这也有助于学习:}
boolean variable = true;
if (variable) {
    // do your stuff
}
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences Saved_Settings = getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    chk_box_PU.setChecked(Saved_Settings.getBoolean("PU", false));
}

public void save_settings(View v) {
    CheckBox chk_box_PU = (CheckBox) findViewById(R.id.chk_box_PU);

    SharedPreferences Saved_Settings = getSharedPreferences("Saved_Settings", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = Saved_Settings.edit();

    prefsEditor.putBoolean("PU", chk_box_PU.isChecked());

    prefsEditor.apply();
}}