【发布时间】:2018-04-13 06:00:48
【问题描述】:
我使用改造来实现这样的接口:
Observable<QueryResult> queryData(@Body QueryParams params);
并定义 QueryResult 类:
class QueryResult {
int count;
...
}
当我执行 queryData 语句时,它会产生以下错误:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid double: ""
显然,这是由api返回数据引起的:
{"count":"",...}
“计数”旨在表示一个数字,但不知何故或有时,服务器开发人员希望使用“”来表示 0。
我的问题是我该如何处理这种情况?
我已尝试在 QueryResult 类中进行错误处理:
class QueryResult {
String count; // change from int to String;
...
int getCount() {
// do the error handling
int ret = 0;
try {
ret = Integer.parseInt(count);
} catch (Exception e) {}
return ret;
}
}
但是有没有更好的方法来处理它?将计数声明为字符串似乎不太直观。我想可能有一个配置改造的选项。
更新 感谢您对提高效率和在 gson 转换器中注册 TypeAdapter 的建议的回答。 但我想知道的是,错误处理是否可以由改造库本身完成。观点是当我最初将count字段声明为int时,它可以同时处理来自服务器的整数和字符串类型的值,如:
{"count":123,...} or {"count":"123",...}
没有错误。所以我假设错误句柄可以与库本身中的整数配对行为一起完成。
提前致谢。
【问题讨论】:
-
如果您的响应数据以字符串形式计数,那么当您获取数据时将其转换。
-
@RajeshKushvaha 当然,我会向后端团队寻求帮助。我只想做错误处理,这样我就不会在半夜醒来检查和验证后端团队的错误。还是谢谢。
-
@AndroidTeam 是的,这就是我在 QueryResult 中尝试过的。我在想,如果我仍然可以将 count 字段用作 int 并与改造库一起进行反序列化和错误处理。
-
@AmirMir 根据链接,通过注册 TypeAdapter 并在其中进行错误处理,这似乎是一个正确且可接受的解决方案。但是,我将不得不编写大量代码来进行错误处理。我就是想知道这种情况能不能在retrofit库中处理。
标签: java android json retrofit retrofit2