【问题标题】:SharedPreferences with EditText Number带有 EditText 编号的 SharedPreferences
【发布时间】:2015-04-21 01:22:22
【问题描述】:

我只想保存用户在 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);
}

【问题讨论】:

    标签: android sharedpreferences preferences savestate


    【解决方案1】:

    在设置文本值之前,您需要在onCreate() 函数中初始化calorieSet 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);
    
        // 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)以及发生错误的代码行。或者使用调试器单步执行。

    【讨论】:

    • 很容易解决,但是我没有早点看到这样的麻烦!谢谢!快速跟进,我可以让它在第一次打开时说“默认”以外的其他内容吗?也许在初始化时将其留空或首先输入另一个值,例如 2000?
    • 也可以使用""作为默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2014-03-05
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    相关资源
    最近更新 更多