【问题标题】:using shared preferences for retrieving data [duplicate]使用共享首选项检索数据[重复]
【发布时间】:2016-07-28 07:18:04
【问题描述】:

我有一个年龄输入编辑文本,我想使用共享首选项将用户以前的输入放在那里(在第一次输入之后)。我已经编写了以下代码,但它强制关闭。有什么问题??

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

//setting text for editText
age_editText.setText(my_prefs.getInt("age_value", 0) + ""); //when i delete this part, it doesn't force close

btn_calculate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                try {
                    Int age_value = Integer.parseInt(age_editText.getText().toString());
                    //shared preferences
                    sharedPreferences my_prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = my_prefs.edit();
                    editor.putInt("age_value", age_value);
                    editor_bmi.commit();

                } catch (Exception e) {
                    Toast.makeText(getContext(), getString(R.string.please_fill_all_inputs), Toast.LENGTH_LONG).show();
                }
        }
    });

【问题讨论】:

  • 发布你的日志猫错误信息

标签: java android android-edittext sharedpreferences


【解决方案1】:

您需要使用getSharedPreferences() 代替getPreferences(),如下所示。

SharedPreferences sharedPreferences = getSharedPreferences("name", MODE_PRIVATE);

注意:getPreferences()getSharedPreferences() 是两种不同的方法,它们返回不同的 Preference 对象。

【讨论】:

    【解决方案2】:

    改变

    sharedPreferences my_prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
    

    sharedPreferences my_prefs = getActivity().getSharedPreferences("my_pref", Context.MODE_PRIVATE);
    

    然后写在上面

    age_editText.setText(my_prefs.getInt("age_value", 0) + "");
    

    正确的做法。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        sharedPreferences my_prefs getActivity().getSharedPreferences("my_pref", Context.MODE_PRIVATE);
        age_editText.setText(my_prefs.getInt("age_value", 0) + ""); //when i delete this part, it doesn't force close
    
        btn_calculate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
    
                    Int age_value = Integer.parseInt(age_editText.getText().toString());
    
                    SharedPreferences.Editor editor = my_prefs.edit();
                    editor.putInt("age_value", age_value);
                    editor_bmi.commit();
    
                } catch (Exception e) {
                    Toast.makeText(getContext(), getString(R.string.please_fill_all_inputs), Toast.LENGTH_LONG).show();
                }
            }
        });
    }
    

    【讨论】:

    • sharedPreferences my_prefs = getActivity().getSharedPreferences("my_pref", Context.MODE_PRIVATE); 你错过了= 创建对象。
    【解决方案3】:

    您可以使用以下方法将您的年龄保存到 SharedPreferences 中:

    public void saveAge(int age_value) {
            SharedPreferences pre = getSharedPreferences("my_age", MODE_PRIVATE);
            SharedPreferences.Editor editor = pre.edit();
            editor.putInt("age_value", age_value);
            editor.commit();
        }
    

    当你想知道你的年龄时,使用这个:

    public int readAge() {
            SharedPreferences pre = getSharedPreferences("my_age", MODE_PRIVATE);
            int age = pre.getInt("age_value", 0);
            return age;
        }
    

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      相关资源
      最近更新 更多