Java Gson使用null int反序列化can';它似乎起作用了

Java Gson使用null int反序列化can';它似乎起作用了,java,android,null,int,Java,Android,Null,Int,当我在网上下载数据时,有时有效,有时无效。 我的问题是一个int: 运行时:“ 运行时是一个int,当我在其上使用gson时,可能会导致以下问题: 01-07 21:22:57.602: E/AndroidRuntime(2726): Caused by: java.lang.NumberFormatException: Invalid int: "" 我尝试了一些if语句,但它不起作用 public int getRuntime() { if(Integer.valueOf(runt

当我在网上下载数据时,有时有效,有时无效。 我的问题是一个
int
: 运行时:“

运行时是一个int,当我在其上使用gson时,可能会导致以下问题:

01-07 21:22:57.602: E/AndroidRuntime(2726): Caused by: java.lang.NumberFormatException: Invalid int: ""
我尝试了一些if语句,但它不起作用

public int getRuntime() {
    if(Integer.valueOf(runtime)==null){
        return 0;
    }else{
        return runtime;
    }
}
甚至

public int getRuntime() {
    if(Integer.valueOf(runtime).equals(null)){
        return 0;
    }else{
        return runtime;
    }
}
但是什么都不起作用。

Integer.valueOf()需要一个表示整数的字符串。用空字符串调用它将导致错误。在将字符串解析为整数之前,需要对其进行测试:

int runtime;
if ("".equals(string)) {
    runtime = 0;
}
else {
    runtime = Integer.parseInt(string);
}
或者,如果您始终希望运行时为0(如果字符串不是有效整数),则捕获异常:

try {
    runtime = Integer.parseInt(string);
}
catch (NumberFormatException e) {
    runtime = 0;
}
现在,是gson为您解析字符串,而这个字符串并不总是整数,那么
运行时
字段不应该是int,而是字符串。您应该自己解析它,如上所示

考虑到您的问题,在尝试使用gson和android之前,您应该先学习Java语言的基础知识。您似乎不了解Java中的类型系统以及异常是什么。读取

整数。valueOf()需要一个表示整数的字符串。用空字符串调用它将导致错误。在将字符串解析为整数之前,需要对其进行测试:

int runtime;
if ("".equals(string)) {
    runtime = 0;
}
else {
    runtime = Integer.parseInt(string);
}
或者,如果您始终希望运行时为0(如果字符串不是有效整数),则捕获异常:

try {
    runtime = Integer.parseInt(string);
}
catch (NumberFormatException e) {
    runtime = 0;
}
现在,是gson为您解析字符串,而这个字符串并不总是整数,那么
运行时
字段不应该是int,而是字符串。您应该自己解析它,如上所示


考虑到您的问题,在尝试使用gson和android之前,您应该先学习Java语言的基础知识。您似乎不了解Java中的类型系统以及异常是什么。阅读

您需要首先检查
运行时
,例如
如果(runtime.isEmpty())
或者更好-使用apache commons lang-
如果(StringUtils.isBlank(runtime))
或者捕获抛出的
数字格式异常

您需要首先检查
运行时
,例如
如果(runtime.isEmpty())
或者更好-使用apache commons lang-
if(StringUtils.isBlank(runtime))
或者捕获抛出的
NumberFormatException

看起来您不了解异常是什么,或者如何处理它们:


提示:无论运行时是什么,它都不能转换为int。从您发布的内容来看,它看起来像一个空字符串,您似乎不了解异常是什么,或者如何处理它们:


提示:无论运行时是什么,它都不能转换为int。从您发布的内容来看,它看起来像一个空字符串

将运行时作为字符串处理,并在反序列化的类中将其声明为字符串

然后像这样使用gson将正确处理空值

Gson gson = new GsonBuilder().serializeNulls().create();

这在序列化时也起作用,通常情况下,如果值为null,它将不会在json中放入任何要序列化的内容。

将运行时作为字符串处理,在反序列化的类中将其声明为字符串

然后像这样使用gson将正确处理空值

Gson gson = new GsonBuilder().serializeNulls().create();

这在序列化时也起作用,通常情况下,如果值为null,它将不会在json中放入任何要序列化的内容。

看起来您不了解异常是什么,或者如何处理它们:提示:无论运行时是什么,它都不能转换为
int
。从您发布的内容来看,它看起来像一个empty
String
但当数据工作时,它是一个数字而不是字符串,这很奇怪。@Tsunaze JSON总是一个字符串,数字只是文本编码的。很像你在这里看到的数字1234(在我的注释:)不是一个数字,而是一个可以解析为数字的字符串。你是对的。我只是把字符串改为int。看起来你不明白什么是异常,或者如何处理它们:提示:无论
运行时
是什么,都不能转换成
int
。从您发布的内容来看,它看起来像一个空的
字符串
,但当数据工作时,它是一个数字而不是字符串,这很奇怪。@Tsunaze JSON总是一个字符串,数字只是文本编码的。很像你在这里看到的数字1234(在我的评论:)不是一个数字,而是一个可以被解析成数字的字符串。你是对的。我只是把字符串代替int。