NullPointerException с использованием SharedPreferences - PullRequest
0 голосов
/ 04 апреля 2011


У меня проблема с моим кодом здесь.Я использую SharedPreferences в своем коде, и я получаю исключение NullPointerException в одной строке кода.Вот полный код:

    public class Exercise extends Activity {
String WEIGHT = "0";
String AGE = "0";
String FEET = "0";
String INCHES = "0";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.exercise);

    SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
    SharedPreferences.Editor prefsEditor = myPrefs.edit();
    prefsEditor.putInt(WEIGHT, 0);
    prefsEditor.putInt(AGE, 0);
    prefsEditor.putInt(FEET, 0);
    prefsEditor.putInt(INCHES, 0);
    prefsEditor.commit();


    final EditText weightField = (EditText) findViewById(R.id.EditTextWeight);
    try {
        prefsEditor.putInt(WEIGHT, Integer.parseInt(weightField.getText().toString()));
        prefsEditor.commit();
    } catch(NumberFormatException nfe) {
        System.out.println("Could not parse " + nfe);
    }   

В этой строке появляется исключение NullPointerException:

prefsEditor.putInt(WEIGHT, Integer.parseInt(weightField.getText().toString()));

Спасибо!

РЕДАКТИРОВАТЬ: Вот действие, которое вызывает setContentView (R.layout.main):

public class CalorieIntakeCalculator extends Activity {
/** Called when the activity is first created. */


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

}

public void next(View view) {
    Intent intentExercise = new Intent(view.getContext(), Exercise.class);
    startActivityForResult(intentExercise, 0);
} 
}

Когда в файле main.xml нажимается кнопка «Далее», он отправляет next, который переключает упражнения из CalorieIntakeCalculator в упражнение.

1 Ответ

1 голос
/ 04 апреля 2011

Поскольку вы успешно использовали prefsEditor несколько раз над этой строкой, похоже, что weightField должен быть нулевым.Вы проверили его значение в отладчике?

РЕДАКТИРОВАТЬ: Я также только что заметил, что вы никогда не присваивали значение весу, ни какой-либо из других строк для ключей SharedPreferences, так что все они нулевые.Вам нужно это исправить.

String WEIGHT = "weight";
String AGE = "age";
String FEET = "feet";
String INCHES = "inches";

Для поля веса убедитесь, что в макете упражнения есть EditText с идентификатором R.id.EditTextWeight

...