2011-11-29 72 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