Android 布尔值和 if 条件的 Studio SharedPreferences
Android Studio SharedPreferences of boolean and if conditions
任务:
- 单击保存按钮时:将复选框的布尔值保存到 SharedPreferences。
- 在应用程序启动时检查 SharedPreferences 值是否为真,如果是,请选中复选框。
不确定上面的哪一部分是错误的,所以我向您展示了全部内容。 (在网上搜索了很多天并试图解决这个问题,请原谅新手城市)
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 以防万一问题不在 activity 中。很少见,但对于新手来说是可能的:}
toolbar_save_button.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
<merge
xmlns:android="http://schemas.android.com/apk/res/android">
[...]
<include layout="@layout/toolbar_save_button"/>
</merge>
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 单元格 phone 中的 .apk,当您单击它时 "blibs"。
试试这个:
@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);
到
SharedPreferences Saved_Settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
和这个 if (PU2=="true")
到 if(PU2.equals("true"))
1. 你不需要这个变量:
boolean ever_saved_settings=false;
每次启动应用程序时,此变量都会设置为 false。
如果设置不存在,您也不会收到任何错误,因此该变量无用。
2.你的线路
if (PU2=="true")
将始终 return 错误。在这一行中,您比较的是指针,而不是值。
一直这样使用:
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();
}}
任务: - 单击保存按钮时:将复选框的布尔值保存到 SharedPreferences。 - 在应用程序启动时检查 SharedPreferences 值是否为真,如果是,请选中复选框。
不确定上面的哪一部分是错误的,所以我向您展示了全部内容。 (在网上搜索了很多天并试图解决这个问题,请原谅新手城市)
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 以防万一问题不在 activity 中。很少见,但对于新手来说是可能的:}
toolbar_save_button.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
<merge
xmlns:android="http://schemas.android.com/apk/res/android">
[...]
<include layout="@layout/toolbar_save_button"/>
</merge>
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 单元格 phone 中的 .apk,当您单击它时 "blibs"。
试试这个:
@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);
到
SharedPreferences Saved_Settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
和这个 if (PU2=="true")
到 if(PU2.equals("true"))
1. 你不需要这个变量:
boolean ever_saved_settings=false;
每次启动应用程序时,此变量都会设置为 false。 如果设置不存在,您也不会收到任何错误,因此该变量无用。
2.你的线路
if (PU2=="true")
将始终 return 错误。在这一行中,您比较的是指针,而不是值。
一直这样使用:
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();
}}