-2

我有一个类似于我当前问题的先前问题,那是当我从我的字符串数组中检索空值时,现在我的问题是我认为我也从我的整数数组中获取空​​值,但我不知道如何处理这样的异常,例如:

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)问题,但它似乎不适用于我的整数数组。taskArr[] 是我的字符串数组,taskId[] 是我的整数数组,taskArray[] 是一个编辑文本数组

4

6 回答 6

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.getText()Integer.getId()在 API 文档中看到Integer是否有另一种类型存储在数组中?

于 2013-03-08T12:59:33.790 回答
1

你评论说:

我仍然收到语法错误...

这不是有效的 Java:

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

它应该是:

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

至于其余的,如果您确切地告诉我们 NPE 被扔在哪条线上,我们可能会告诉您它是什么原因造成的。您似乎在暗示这是这一行:

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

如果是这种情况,并且 iftaskIdtaskArrayhas typesint[]然后EditText[]有 3 种可能性:

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

如果我们假设上一行:

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

没有抛出NPE,即排除了两种可能性,taskId成为罪魁祸首。


我想说的另一条评论是,所有为避免 NPE 的空值测试很可能是错误的方法。您应该找出这些null值的来源并更改其余代码的逻辑,以免发生这种情况。

于 2013-03-08T13:36:28.727 回答
0

您应该将两行都包含在if条件中:

if(taskArr[i] != null)
{
    taskArr[i] = taskArray[i].getText().toString();
    taskId[i] = taskArray[i].getId();
}
于 2013-03-08T13:00:32.843 回答
0

这是因为 an intcannot be null,而是 an Integercan。我假设你的taskArray.getId()回报是,Integer但是。因此,您直接投射到,如果是,这将失败。这条线taskIdint[]intIntegernull

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

相当于

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

如果taskArray[i].getId()为空,这里会发生什么?

你需要得到一个Integer,检查它是否是,如果不是,null则分配给一个。例如:intnull

Integer id = taskArray[i].getId();
if (id != null) {
    taskId[i] = id;
}
于 2013-03-08T13:01:18.393 回答
0

{}请在 if 子句中使用大括号 ( )。如果不这样做,则仅识别条件下的行:

if(taskArr[i] != null) {
    taskArr[i] = taskArray[i].getText().toString();
    taskId[i] = taskArray[i].getId();
}
于 2013-03-08T13:01:23.547 回答
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();
}
于 2013-03-08T13:05:37.543 回答