简体   繁体   English

在文本视图中显示共享的首选项

[英]Display shared preference in textview

I'm trying to make a simple calculator app and want the final calculation result to not disappear once the app closes. 我正在尝试制作一个简单的计算器应用程序,并希望最终的计算结果在应用程序关闭后不会消失。

I can get the numbers that are inputted by the user to stay in place and the result is calculated correctly, however once the app closes the result disappears?! 我可以获取用户输入的数字以保持原位,并且可以正确计算结果,但是一旦应用关闭,结果就会消失吗?

Any help would be much appreciated!! 任何帮助将非常感激!!

@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 + "";

} }

您可以将结果保存在将计算结果显示在文本视图中的位置,然后保存所保存的内容以及向用户显示的内容

Initialize your SharedPreference as follows, 如下初始化您的SharedPreference,

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

Try this, 尝试这个,

First, save your result to preferences in addNumbers method using 首先,使用以下命令将result保存到addNumbers方法的preferences

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

See the Changes to your addNumbers method below-: 请参阅下面的对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 + "";

  } 
}

Where result is your key. result是您的关键。 so to get the value which you have stored you can use prefs with the same key like 因此,要获取已存储的值,可以将prefs与相同的键一起使用

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

Get the value from preference in onCreate and set this value to your TextView . onCreate preference中获取值,然后将此值设置为TextView See the sample code below 请参阅下面的示例代码

@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*/

You can do this like bellow.. 您可以像下面这样做。

  1. Create a method to save SharedPreferences 创建一种保存SharedPreferences的方法

      private void savePreferences(String key, String value) { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(this); Editor edit = sp.edit(); edit.putString(key, value); edit.commit(); } 
  2. Save value to method like 将值保存到类似

     savePreferences("autosave", s.toString()); 
  3. View data form from SharedPreferences , Create another method like 从SharedPreferences查看数据表单,创建另一个方法,例如

     private void loadSavedPreferences() { SharedPreferences sp = PreferenceManager .getDefaultSharedPreferences(this); String autosave = sp.getString("autosave", ""); editText3.setText(autosave); } 
  4. Call loadSavedPreferences method in oncreate mehtod in activity & enjoy it... Thanks... 调用loadSavedPreferences方法的OnCreate mehtod在活性享受...谢谢...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM