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对不起,我忽略了一些东西。你能试试这个代码吗?