2015-04-21 5 views
0

Все, что я просто хочу сделать, это сохранить любой номер калории, который пользователь вводит в EditText. Я слишком долго пытался реализовать savedpreferences.SharedPreferences с EditText Number

Эта цифра калорийности будет передана другому действию, я просто хочу, чтобы значение оставалось там, поэтому, если вы переключаете действия или выходите/вводите приложение, число остается.

Вы увидите мои догадки о том, какой код должен быть с несколькими апострофами перед ними. В настоящее время без апострофов он строит, но ошибки до начала.

При решении, не могли бы вы добавить его прямо в код? Возможно, я полностью перепутал все это. (кнопка сохранения также будет работать) Спасибо!

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); 
} 

ответ

2

Вы должны инициализировать переменную calorieSetEditText в вашей 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) и в какой строке кода происходит ошибка. Или выполните с помощью отладчика.

+0

Легкое исправление, но такая стычка я не видел раньше! Благодаря! Быстрое наблюдение, могу ли я заставить его сказать что-то другое, чем «default» в первый раз, когда оно открыто? Может быть, оставить его пустым или поставить другое значение сначала, как и при инициализации в 2000 году? – pjhollow

+0

Изменено "default" на null. Выглядит неплохо. – pjhollow

+0

Вы также можете использовать "" по умолчанию. – samgak

 Смежные вопросы

  • Нет связанных вопросов^_^