2013-03-08 62 views
-2

我有一個類似於我當前問題的前一個問題,那就是當我從我的String數組中檢索到空值時,現在我的問題是我想我也從我的integar數組中獲得空值,但我不知道如何處理這樣的例外,例如:Android的NullPointerException Java

for int(i=0;i<n;i++) 
    { 
     if(taskArr[i] != null){ 
     taskArr[i] = taskArray[i].getText().toString(); 
     taskId[i] = taskArray[i].getId(); 
    } 
    } 

if(taskArr[i] != null)解決我的問題從我的字符串數組越來越空值,但它似乎並沒有對我的integar陣列工作確實。 taskArr []是我的字符串數組,taskId []是我的integar數組,taskArray []是編輯文本數組。

+0

整數數組不能包含空值(除非使用Integer []而不是整數[])。如果這些是整數數組,這是如何工作的? 'taskArray [i] .getText()' – Simon 2013-03-08 13:00:01

+0

對不起,我忘了提及taskArray []是一個編輯文本數組 – 2013-03-08 13:02:10

+0

不僅在評論中提到這一點,編輯問題並添加它。 – m0skit0 2013-03-08 14:55:05

回答

0

這是因爲int不能null,而是一個Integer即可。我假設你的taskArray.getId()返回Integer,但taskIdint[]。因此,您直接投射到int,如果Integernull,則投射失敗。這條線

taskId[i] = taskArray[i].getId(); 

相當於與

taskId[i] = taskArray[i].getId().intValue(); 

這裏會發生什麼,如果taskArray[i].getId()爲空?

你需要得到一個Integer,檢查它是否null,然後分配到int,如果你想,如果它不是null。例如:

Integer id = taskArray[i].getId(); 
if (id != null) { 
    taskId[i] = id; 
} 
+0

我嘗試過,但我仍然得到一個強制關閉d: – 2013-03-08 13:18:56

2

條件if語句僅適用於需要使用括號的第一行。通常,在if語句中使用括號是一種很好的做法,它使事情變得更加直觀,並避免遇到像這樣的錯誤。您還需要檢查getText()是否爲空。

for int(i=0;i<n;i++) 
    { 
     if(taskArr[i] != null && taskArr[i].getText() != null) 
     { 
      taskArr[i] = taskArray[i].getText().toString(); 
      taskId[i] = taskArray[i].getId(); 
     } 
    } 

在旁註中提到您的數組包含Integer對象。我沒有在Integer的API文檔中看到Integer.getText()Integer.getId()是另一種存儲在數組中的類型嗎?

+0

即使在大括號我得到一個NullPointerException錯誤): – 2013-03-08 13:04:09

+0

@AnthonyWu那是因爲gettext的()可能是空的,我以爲你利用你的問題一個整數數組,我會更新。 – 2013-03-08 13:04:57

+0

@AnthonyWu檢查我的答案,我認爲這是你的問題。你應該在你的問題中提供更多細節,比如完整的堆棧跟蹤。 – m0skit0 2013-03-08 13:08:25

0

你應該有兩個封閉在if條件的線路:

if(taskArr[i] != null) 
{ 
    taskArr[i] = taskArray[i].getText().toString(); 
    taskId[i] = taskArray[i].getId(); 
} 
0

請在if子句中使用大括號({})。如果不這樣做,只是條件下的線被認爲是:

if(taskArr[i] != null) { 
    taskArr[i] = taskArray[i].getText().toString(); 
    taskId[i] = taskArray[i].getId(); 
} 
0

嗯,你是否taskArr爲空,則嘗試從taskId提取值。有可能taskIdnull,或者至少是那個值。你需要同樣檢查。

試試這個:

for int(i=0;i<n;i++) 
{ 
    if(taskArray[i].getText() != null) //Check if Text from taskArray[i] is null 
     taskArr[i] = taskArray[i].getText().toString(); 
    if(taskArray[i].getId != null) //Check if ID from taskArray[i] is null 
     taskId[i] = taskArray[i].getId(); 
} 
+0

我想如果(任務id [我] = NULL,但代碼獲取一個語法錯誤 – 2013-03-08 13:07:05

+0

@Anthony吳對不起,我忽略了一些你可以試試這個代碼 – Joetjah 2013-03-08 13:08:44

+0

!?我仍然得到一個語法錯誤 – 2013-03-08 13:20:54

1

你的評論:

我仍然得到一個語法錯誤對於...

這不是有效的Java:

for int(i=0;i<n;i++) { 
} 

它應該是:

for (int i = 0; i < n; i++) { 
} 

至於其他的,如果你告訴我們到底是哪行的NPE被拋出我們可以告訴你它是什麼造成的。你似乎在暗示,這是該行:

taskId[i] = taskArray[i].getId(); 

如果是這樣的話,如果taskIdtaskArray有類型int[]EditText[]然後有3種可能性:

- `taskId` is `null`, 
- `taskArray` is `null`, or 
- `taskArray[i]` is `null`. 

如果我們假設那上一行:

taskArr[i] = taskArray[i].getText().toString(); 

沒有拋出NPE,這就消除了兩種可能性,只剩下0個作爲罪魁禍首的是。


其他評論我要提出的是,所有這些測試空的,以避免NPE的最有可能是錯誤的做法。你應該找出這些值來自哪裏,並且改變其餘代碼的邏輯,以便它不會發生。