当我这样做时,我得到一个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)
答案 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
数组添加任何内容。在我看来,您认为answer1
到answer6
会进入您的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方法