NullPointerException при изменении действий - PullRequest
0 голосов
/ 13 марта 2011

Я довольно новичок в разработке для Android, и у меня есть быстрый вопрос о NullPointerException. Когда кнопка нажата на первой странице активности, она переключается на вторую активность, где есть NullPointerException. Вот код для кнопки «Далее» main.xml (той, которая нажимается для переключения действий):

<Button
            android:id="@+id/ButtonNext"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/next"
            android:onClick="next">
        </Button>

Вот код для первого занятия:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

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

При нажатии кнопки «Далее» происходит переключение на упражнение:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class Exercise extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.exercise);

        final EditText weightField = (EditText) findViewById(R.id.EditTextWeight);
        try {
            ((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString()));
        } catch(NumberFormatException nfe) {
            System.out.println("Could not parse " + nfe);
        }   

В классе упражнений я устанавливаю ContentView для exerc.xml. В следующих нескольких утверждениях я хочу установить глобальный целочисленный вес на число, которое пользователь вводит в поле EditTextWeight EditText. Вот код в файле Global.java, который расширяет Appllication и создает глобальные переменные:

import android.app.Application;

public class Global extends Application {
     private int weight;
     private int age;
     private int feet;
     private int inches;


        //START WEIGHT
        public int getWeight() {
            return weight;
        }

        public void setWeight(int weight) {
            this.weight = weight;
        }
        //END WEIGHT


        //START AGE
        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
        //END AGE


        //START FEET
        public int getFeet() {
            return feet;
        }

        public void setFeet(int feet) {
            this.feet = feet;
        }
        //END FEET


        //START INCHES
        public int getInches() {
            return inches;
        }

        public void setInches(int inches) {
            this.inches = inches;
        }
        //END INCHES
}

Когда я пытаюсь запустить программу в эмуляторе, она вылетает. Я посмотрел в LogCat и нашел NullPointerException, используя точки останова в этой строке в упражнении. Java:

((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString()));

Спасибо ~:)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Общий совет для исключений нулевого указателя.

  1. Открыть перспективу Debug в Eclipse
  2. Выберите вкладку представления «Точки останова».
  3. Выберите «Добавить точку исключения Java» и выберите NullPointerException.
  4. Запустите свою деятельность, используя «Отладка как ...» или прикрепив отладчик на работающий экземпляр через DDMS.
  5. Выполнить нарушающий рабочий процесс. Это сломается на линии, которая вызвал NPE.
1 голос
/ 13 марта 2011

Если вы хотите сохранить состояние в вашем приложении, я настоятельно рекомендую изучить систему SharedPrefrences.

Из любой Активности или Сервиса в вашем Приложении вы можете получить доступ к общим настройкам, выполнив:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Вы также можете легко сделать PreferencesActivity для изменения настроек без необходимости писать много кода.

...