簡體   English   中英

在文本視圖中顯示共享的首選項

[英]Display shared preference in textview

我正在嘗試制作一個簡單的計算器應用程序,並希望最終的計算結果在應用程序關閉后不會消失。

我可以獲取用戶輸入的數字以保持原位,並且可以正確計算結果,但是一旦應用關閉,結果就會消失嗎?

任何幫助將非常感激!!

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.calculator);

    final SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this);

    editText3.setText(prefs.getString("autoSave", ""));
    editText4.setText(prefs.getString("autoSave1", ""));
    editText6.setText(prefs.getString("autoSave2", ""));
    editText8.setText(prefs.getString("autoSave3", ""));



    editText3.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
            textViewResult.setText(addNumbers());
        }


        public void afterTextChanged(Editable s)
        {
            prefs.edit().putString("autoSave", s.toString()).commit();
        }


    });

    editText4.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {

        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
            textViewResult.setText(addNumbers());

        }

        public void afterTextChanged(Editable s)
        {
            prefs.edit().putString("autoSave1", s.toString()).commit();
        }
    });

    editText6.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {


        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
            textViewResult.setText(addNumbers());

        }

        public void afterTextChanged(Editable s)
        {
            prefs.edit().putString("autoSave2", s.toString()).commit();
        }
    });

    editText8.addTextChangedListener(new TextWatcher() {

        public void beforeTextChanged(CharSequence s, int start, int count,
                                      int after) {


        }

        public void onTextChanged(CharSequence s, int start, int before,
                                  int count) {
            textViewResult.setText(addNumbers());

        }

        public void afterTextChanged(Editable s)
        {
            prefs.edit().putString("autoSave3", s.toString()).commit();
        }
    });
}

private String addNumbers() {
    int number1;
    int number2;
    int number3;
    int number4;
    if (editText3.getText().toString() != "" && editText3.getText().length() > 0) {
        number1 = Integer.parseInt(editText3.getText().toString());
    } else {
        number1 = 0;
    }
    if (editText4.getText().toString() != "" && editText4.getText().length() > 0) {
        number2 = Integer.parseInt(editText4.getText().toString());
    } else {
        number2 = 0;
    }
    if (editText6.getText().toString() != "" && editText6.getText().length() > 0) {
        number3 = Integer.parseInt(editText6.getText().toString());
    } else {
        number3 = 0;
    }
    if (editText8.getText().toString() != "" && editText8.getText().length() > 0) {
        number4 = Integer.parseInt(editText8.getText().toString());
    } else {
        number4 = 0;
    }

    int sum = (number1 * 2) + (number2 * 4) + (number3 * 2) + (number4 * 2);
    if (sum > 6) sum = 6;
    return sum + "";

} }

您可以將結果保存在將計算結果顯示在文本視圖中的位置,然后保存所保存的內容以及向用戶顯示的內容

如下初始化您的SharedPreference,

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);

嘗試這個,

首先,使用以下命令將result保存到addNumbers方法的preferences

prefs.edit().putString("result", sum.toString()).commit();

請參閱下面的對addNumbers方法的更改:

private String addNumbers() {
int number1;
int number2;
int number3;
int number4;
if (editText3.getText().toString() != "" && editText3.getText().length() > 0) {
    number1 = Integer.parseInt(editText3.getText().toString());
} else {
    number1 = 0;
}
if (editText4.getText().toString() != "" && editText4.getText().length() > 0) {
    number2 = Integer.parseInt(editText4.getText().toString());
} else {
    number2 = 0;
}
if (editText6.getText().toString() != "" && editText6.getText().length() > 0) {
    number3 = Integer.parseInt(editText6.getText().toString());
} else {
    number3 = 0;
}
if (editText8.getText().toString() != "" && editText8.getText().length() > 0) {
    number4 = Integer.parseInt(editText8.getText().toString());
} else {
    number4 = 0;
}

int sum = (number1 * 2) + (number2 * 4) + (number3 * 2) + (number4 * 2);
if (sum > 6) sum = 6;
prefs.edit().putString("result", sum.toString()).commit();
return sum + "";

  } 
}

result是您的關鍵。 因此,要獲取已存儲的值,可以將prefs與相同的鍵一起使用

prefs.getString("result","");

onCreate preference中獲取值,然后將此值設置為TextView 請參閱下面的示例代碼

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.calculator);

    final SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(this);

    String result= prefs.getString("result",""); //where "" is your default value
    if(!result.equals("") && !result.isEmpty()){
      textViewResult.setText(addNumbers());
    }


/*other code*/

您可以像下面這樣做。

  1. 創建一種保存SharedPreferences的方法

      private void savePreferences(String key, String value) { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(this); Editor edit = sp.edit(); edit.putString(key, value); edit.commit(); } 
  2. 將值保存到類似

     savePreferences("autosave", s.toString()); 
  3. 從SharedPreferences查看數據表單,創建另一個方法,例如

     private void loadSavedPreferences() { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(this); String autosave = sp.getString("autosave", ""); editText3.setText(autosave); } 
  4. 調用loadSavedPreferences方法的OnCreate mehtod在活性享受...謝謝...

暫無
暫無

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

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