2011-11-29 38 views
1

时,我得到一个NullPointerException当我这样做:NullPointerException异常检查的EditText值

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) 
+0

难道这是因为'答案[]'还是空?你从来没有真正分配过任何东西。您只将值分配给答案#变量。 –

+0

对不起,我没有包括在我的答案..更新的答案! – BlackFire27

回答

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数组,除非你在其他地方声明了你没有发布的数据。您的answers阵列中的所有6 EditTexts当前为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

upvote比我的更简洁的回答,虽然实际上OP甚至不需要将他们粘在他自己的阵列中,因为他正在做的事情。 findViewById()可以放在最后一个循环中。 – Codeman

+0

检查我在上面......你更新后的答案是一个年纪大一点..甚至当我致电年底答案[0] ..而做这样的事情..回答[0] .getText()。的toString,并尝试将它作为在日志留言...它抛出异常..答案[0]似乎是空 – BlackFire27

+0

现在noo..I得到它。我输入了错误的第一R.id.editText1 ...这就是为什么它没有找到ID ..我想日食表明,每当我指的是在资源编译错误......我无论如何都会接受你的答案 – BlackFire27

2

你可以试着问一个问题明确,它会产生更多有用的答案。 :)

两件事。您需要确保在拨打item.getText().toString().equals("")之前拨打answer1=(EditText) findViewById(R.id.editText1);来电,否则您将始终收到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,并且会给出空值。

+0

was not that what does above above..did you just skim – BlackFire27

+0

..lol..funny syntax answers = new EditText [6]();那是C++吗? – BlackFire27

+0

你编辑你的问题看起来像我的回答:) – Codeman

1

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

+0

这是我的第一个想法,,但错误的xml文件..我没有编译error..so我不可能猜到 – BlackFire27

0

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

+0

它是所有的onclick method..Otherwise里面会有一个编译错误 – BlackFire27

+0

我知道,但它在您的问题中提供的代码中缺少。在发布之前编辑你的代码只会隐藏原来的错误,你想修正的错误,这就是发生在这里的事情。 – Marmoy