检查EditText值时出现Nullpointerexception

时间:2011-11-29 15:53:55

标签: android nullpointerexception android-edittext

当我这样做时,我得到一个nullpointerexception:

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

为什么我在if语句中得到nullpointerexception?

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 个答案:

答案 0 :(得分:3)

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数组添加任何内容。在我看来,您认为answer1answer6会进入您的answers数组,除非您在其他地方声明了您尚未发布的数据。您EditTexts数组中的所有6个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]);
}

答案 1 :(得分:2)

您可以尝试明确地提问,它会产生更多有用的答案。 :)

两件事。您需要确保在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尚未获得id s,并且会给出nullrefs。

答案 2 :(得分:1)

确保这些EditText ID来自当前活动的布局,并且findViewById()方法调用是在setContentView()方法调用之后。

答案 3 :(得分:0)

您在所提供的代码中缺少onclicklistener的onclick方法