2013-03-08 87 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的最有可能是错误的做法。你应该找出这些值来自哪里,并且改变其余代码的逻辑,以便它不会发生。