Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java的NullPointerException_Java_Android_Eclipse_Nullpointerexception_Runtimeexception - Fatal编程技术网

Android Java的NullPointerException

Android Java的NullPointerException,java,android,eclipse,nullpointerexception,runtimeexception,Java,Android,Eclipse,Nullpointerexception,Runtimeexception,我之前有一个问题与我当前的问题类似,那就是当我从字符串数组中检索空值时,现在我的问题是我认为我也从整数数组中获取空值,但我不知道如何处理此类异常,例如: for int(i=0;i<n;i++) { if(taskArr[i] != null){ taskArr[i] = taskArray[i].getText().toString(); taskId[i] = taskArray[i].getId(); } }

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

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

对于int(i=0;i条件if语句只适用于需要使用方括号的第一行。一般来说,在if语句中使用方括号是一种很好的做法,它使事情更直观,并避免您遇到这样的错误。您还需要检查
getText()
是否不为null

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();
        }
    }

对于int(i=0;i如果
条件:

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

这是因为
int
不能为
null
,但是
整数可以。我假设您的
taskArray.getId()
返回一个
Integer
,但是
taskId
int[]
。因此,您将直接强制转换到
int
,如果
整数
null
,则转换将失败。此行

taskId[i] = taskArray[i].getId();
相当于

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

您需要获取一个
整数
,检查它是否为
null
,如果它不是
null
,则需要分配给
int
。例如:

for int(i=0;i<n;i++)
    {
        if(taskArr[i] != null){
        taskArr[i] = taskArray[i].getText().toString();
        taskId[i] = taskArray[i].getId();
    }
    }
Integer id = taskArray[i].getId();
if (id != null) {
    taskId[i] = id;
}
请在if子句中使用花括号(
{}
)。如果不使用,则只识别条件下的行:

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

那么,您可以检查
taskArr
是否为空,然后尝试从
taskId
中提取一个值。
taskId
可能是
null
,或者至少是其中的值。您需要同样地进行检查

试试这个:

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();
}
对于int(i=0;i您评论:

我仍然得到一个语法错误

这是无效的Java:

for int(i=0;i<n;i++) {
}
如果是这种情况,并且如果
taskId
taskArray
具有类型
int[]
EditText[]
,则有3种可能性:

- `taskId` is `null`,
- `taskArray` is `null`, or 
- `taskArray[i]` is `null`.
如果我们假设前一行:

    taskArr[i] = taskArray[i].getText().toString();
没有抛出NPE,这消除了两种可能性,留下
taskId
作为罪魁祸首



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

整数数组不能包含空值(除非使用integer[]如果这些是整数数组,这是如何工作的?
taskArray[i].getText()
对不起,我忘了提到taskArray[]是一个edittext数组。不要只在注释中提到它,编辑问题并添加它。即使有花括号,我也会得到一个nullpointerexception错误):@AnthonyWu这是因为getText()可能为空,我以为您使用的是问题中的整数数组,我会更新。@AnthonyWu检查我的答案,我认为这是您的问题。您应该在问题中提供更多详细信息,如完整的stacktrace。或者getId()可能为空…问题太模糊,无法回答。我尝试了if(taskId[I]!=null,但代码获取语法error@Anthony对不起,我忽略了一些东西。你能试试这个代码吗?