使用EditText编号的SharedPreferences

时间:2015-04-21 01:22:22

标签: android sharedpreferences preferences savestate

我只想保存用户在EditText中设置的卡路里数。我已经尝试了很长时间来实现保存的偏好。

这个卡路里的数字将传递给另一个活动,我只想让值保留在那里,所以如果你切换活动或退出/输入应用程序,这个数字会保留。

你会看到我猜测代码应该是什么,前面有几个撇号。目前,如果没有撇号,它会构建,但在开始之前就会出现错误。

解决问题时,您可以直接将其添加到代码中吗?我可能完全搞砸了所有这些的位置。 (保存按钮也可以)谢谢!

public class Settings extends ActionBarActivity {

//public static final String MY_PREFS_NAME = "MyPrefsFile";

EditText calorieSet;



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



    //SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //String calValue = sharedPreferences.getString("calValue", "default");
    //calorieSet.setText( calValue );


}


public void onClick(View view) {

    Intent i = new Intent(this, MainActivity.class);

    final EditText calorieSet = (EditText) findViewById(R.id.calorieSet);
    String userCals= calorieSet.getText().toString();
    i.putExtra("calorieSet",userCals );


    if (userCals == null || userCals.equals("")) {
        Toast.makeText(this, "Please enter a calorie number", Toast.LENGTH_SHORT).show();
        return;
    }


    //SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    //SharedPreferences.Editor editor = sharedPreferences.edit();
    //editor.putString("calValue", calorieSet.getText().toString());
    //editor.commit();

    startActivity(i);
}

1 个答案:

答案 0 :(得分:2)

在设置文本值之前,您需要在calorieSet函数中初始化EditText onCreate()变量:

public class Settings extends ActionBarActivity {

public static final String MY_PREFS_NAME = "MyPrefsFile";

EditText calorieSet;



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

    // add this line: 
    calorieSet = (EditText) findViewById(R.id.calorieSet);

    SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    String calValue = sharedPreferences.getString("calValue", "default");
    calorieSet.setText( calValue );


}


public void onClick(View view) {

    Intent i = new Intent(this, MainActivity.class);

    // This line not necessary as you have already set the variable in onCreate():
    //final EditText calorieSet = (EditText) findViewById(R.id.calorieSet);

    String userCals= calorieSet.getText().toString();
    i.putExtra("calorieSet",userCals );


    if (userCals == null || userCals.equals("")) {
        Toast.makeText(this, "Please enter a calorie number", Toast.LENGTH_SHORT).show();
        return;
    }


    SharedPreferences sharedPreferences = getApplication().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("calValue", calorieSet.getText().toString());
    editor.commit();

    startActivity(i);
}

如果出现这样的错误,请检查LogCat,它会给出关于出错的提示(例如NullPointerException)以及发生错误的代码行。或者使用调试器。