共享偏好以保存editText

时间:2016-07-18 12:36:51

标签: java android android-studio sharedpreferences

我正在尝试创建一个供我自己使用的应用程序,并且我正在尝试将3个editText框保存到Sharedpref,以便我可以使用这些值在应用程序中稍后计算。

以下是代码:

SharedPreferences mSharedPreferences;
private EditText mEditTextBench;
private EditText mEditTextSquat;
private EditText mEditTextDead;
private Button mButton;
public String maxDead =  mSharedPreferences.getString("maxDead", "DEFAULT");

然后在oncreate方法中我有:

mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    mButton = (Button) findViewById(R.id.button);
    mEditTextBench = (EditText) findViewById(R.id.editTextBench);
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat);
    mEditTextDead = (EditText) findViewById(R.id.editTextDead);

和我的按钮onclicklistener:

mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SharedPreferences.Editor editor = mSharedPreferences.edit();
            editor.putString("maxDead", mEditTextDead.getText().toString());
            editor.commit();

如果我将公共String maxDead作为最终字符串放在onCreate方法中,它可以工作,但我希望以后能够使用editText更改字符串。我认为我不能把它作为决赛。

现在代码的方式,我收到了这个错误:

  

尝试在空对象引用上调用接口方法'java.lang.String android.content.SharedPreferences.getString(java.lang.String,java.lang.String)'

3 个答案:

答案 0 :(得分:1)

你的代码应该是这样的。

SharedPreferences mSharedPreferences;
private EditText mEditTextBench;
private EditText mEditTextSquat;
private EditText mEditTextDead;
private Button mButton;
public String maxDead;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);

    mSharedPreferences= PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    maxDead =  mSharedPreferences.getString("maxDead", "DEFAULT");

    mButton = (Button) findViewById(R.id.button);
    mEditTextBench = (EditText) findViewById(R.id.editTextBench);
    mEditTextSquat = (EditText) findViewById(R.id.editTextSquat);
    mEditTextDead = (EditText) findViewById(R.id.editTextDead);

    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            SharedPreferences.Editor editor = mSharedPreferences.edit();
            editor.putString("maxDead", mEditTextDead.getText().toString());
            editor.commit();
        }
    });
}

编辑:此处我正在展示使用SharedPreference的方式

SharedPreferences myPreference;
String MY_PREFERENCE = "my_preference";

在onCreate initialise SharedPreference中:

myPreference = getSharedPreferences(MY_PREFERENCE, Context.MODE_PRIVATE);

获取价值

String data = myPreference.getString("maxDead", "")

用于编辑SharedPreference

SharedPreferences.Editor editor = myPreference.edit();
editor.putString("maxDead", mEditTextDead.getText().toString());
editor.commit();

我希望这会有所帮助。

答案 1 :(得分:0)

您因此而收到错误:

public String maxDead =  mSharedPreferences.getString("maxDead", "DEFAULT");

因为您没有初始化mSharedPreferences所以,它正在抛出NullPointerException

将其更改为:

public String maxDead;

然后在初始化maxDead后在onCreate方法中初始化mSharedPreferences

maxDead =  mSharedPreferences.getString("maxDead", "DEFAULT");

<强>更新

由于变量maxDead的值仅在onClickListener中设置一次,因此您无法获得maxDataonCreate的更新值。因此,在maxData中更新SharedPreferences的值时,不会更新变量。因此,您应该使用这样的方法来获取SharedPreference的最新值,而不是保留变量:

private String getMaxDead(){
    if(mSharedPreferences == null)
        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getBaseContext());
    return mSharedPreferences.getString("maxDead", "DEFAULT");
}

所以在你的吐司中使用:getMaxDead()它会起作用。

答案 2 :(得分:0)

我对Android也很新,但我会尝试回答。您获得异常的原因是,在创建活动时,String maxDead中没有任何内容,因为它在顶部被指定为private String maxDead。您只需在单击按钮时为其指定值。你想在哪里使用这个值?我还不能发表评论,这就是为什么我在答案中写这个的原因。 :(

这是我如何使用SharedPreferences的示例:

SharedPreferences spref = getSharedPreferences("MY_PREFS", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = spref.edit();
editor.putString("maxDead", mEditTextDead.getText().toString());
editor.apply;

然后在某处(另一个活动/片段),你需要这个值:

String maxDead = spref.getString("maxDead", "");