簡體   English   中英

boolean和if條件的Android Studio SharedPreferences

[英]Android Studio SharedPreferences of boolean and if conditions

任務:-單擊保存按鈕時:將復選框的布爾值保存到SharedPreferences。 -在應用啟動時,檢查SharedPreferences值是否為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的情況,以防問題不在活動中。 很少見,但對於新手來說是可能的:}

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>

願望包含在: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();
}

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();
}}

我認為您缺少首選項名稱:

   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"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM