Nullpointerexception при проверке значения EditText - PullRequest
1 голос
/ 29 ноября 2011

Я получаю нулевое исключение, когда я делаю это:

EditText[] answers;

// В методе oncreate я делаю это: это устанавливается после метода setContent ().

   answers=new EditText[6];
     answers[0]=(EditText) findViewById(R.id.editText1);
     answers[1]=(EditText) findViewById(R.id.editText2);
     answers[2]=(EditText) findViewById(R.id.editText3);
     answers[3]=(EditText) findViewById(R.id.editText4);
     answers[4]=(EditText) findViewById(R.id.editText5);
     answers[5]=(EditText) findViewById(R.id.editText6);

В onClickListener кнопки я положил это:

nextQuestion_btn.setOnClickListener(new View.OnClickListener() 
{
    for(EditText item : answers) { 
        if(item.getText().toString().equals("")) { //nuller Exception here
            editTextIsEmpty=true;
        break;
        }
    }
}

почему я получаю nullpointerexception ... в операторе if?

UPDATE; Я положил весь EditText в массив. Весь код находится внутри метода onCreate

Вот что я получаю:

 11-29 16:11:24.076: E/AndroidRuntime(616): FATAL EXCEPTION: main
11-29 16:11:24.076: E/AndroidRuntime(616): java.lang.NullPointerException
11-29 16:11:24.076: E/AndroidRuntime(616):  at com.NewOrder.SetTest$1.onClick(SetTest.java:95)
11-29 16:11:24.076: E/AndroidRuntime(616):  at android.view.View.performClick(View.java:2485)
11-29 16:11:24.076: E/AndroidRuntime(616):  at android.view.View$PerformClick.run(View.java:9080)
11-29 16:11:24.076: E/AndroidRuntime(616):  at android.os.Handler.handleCallback(Handler.java:587)
11-29 16:11:24.076: E/AndroidRuntime(616):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-29 16:11:24.076: E/AndroidRuntime(616):  at android.os.Looper.loop(Looper.java:123)

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011
answers = new EditText[7];
answer1 = (EditText) findViewById(R.id.editText1);
answer2 = (EditText) findViewById(R.id.editText2);
answer3 = (EditText) findViewById(R.id.editText3);
answer4 = (EditText) findViewById(R.id.editText4);
answer5 = (EditText) findViewById(R.id.editText5);
answer6 = (EditText) findViewById(R.id.editText6);

Должно быть:

answers = new EditText[6];
answers[0] = (EditText) findViewById(R.id.editText1);
answers[1] = (EditText) findViewById(R.id.editText2);
answers[2] = (EditText) findViewById(R.id.editText3);
answers[3] = (EditText) findViewById(R.id.editText4);
answers[4] = (EditText) findViewById(R.id.editText5);
answers[5] = (EditText) findViewById(R.id.editText6);

В противном случае вы ничего не добавляете в массив answers, как уже было сказано. Мне кажется, что вы думаете, что от answer1 до answer6 входят в ваш массив answers, если у вас нет тех объявлений, которые вы не опубликовали в другом месте Все 6 EditTexts в вашем массиве answers в настоящее время null, что вызывает ваше исключение.

Кроме того, что-то вроде этого было бы более кратким:

int[] editTexts = { R.id.editText1, R.id.editText2, R.id.editText3, 
    R.id.editText4, R.id.editText5, R.id.editText6 };

EditText[] answers = new EditText[editTexts.length];

for(int i = 0; i < answers.length; i++) {
    answers[i] = (EditText)findViewById(editTexts[i]);
}
2 голосов
/ 29 ноября 2011

Вы можете попытаться задать вопрос явно, это приведет к более полезным ответам. :)

Две вещи. Вам необходимо убедиться, что вы делаете answer1=(EditText) findViewById(R.id.editText1); вызовы до ваших item.getText().toString().equals("") вызовов, иначе вы всегда получите ошибку nullref.

Другая проблема заключается в том, что вы никогда ничего не назначаете массиву answers. Вам нужно поместить каждый из этих EditText в массив, прежде чем вы сможете его использовать, или он всегда будет пустым.

Попробуйте это:

answers = new EditText[6]();
answers[0] = answer0;
answers[1] = answer1;
...
answers[5] = answer5;

Код должен работать, когда вы это делаете.

РЕДАКТИРОВАТЬ, чтобы отразить изменения в вопросе:

Введите свой код назначения (answers[0] = (EditText) findViewById(R.id.editText1);) внутри onResume(), а не в onCreate(). EditText s не были даны id s в точке, и будут давать nullrefs.

1 голос
/ 29 ноября 2011

Убедитесь, что эти EditText идентификаторы взяты из макета текущего действия, а findViewById() вызовы методов после setContentView() вызова метода.

0 голосов
/ 29 ноября 2011

Вам не хватает метода onclick для onclicklistener в предоставленном вами коде

...