Pai*_*ang 6 java android json retrofit retrofit2
我使用改造来实现这样的接口:
Observable<QueryResult> queryData(@Body QueryParams params);
Run Code Online (Sandbox Code Playgroud)
并定义 QueryResult 类:
class QueryResult {
int count;
...
}
Run Code Online (Sandbox Code Playgroud)
当我执行 queryData 语句时,它会产生以下错误:
com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid double: ""
Run Code Online (Sandbox Code Playgroud)
显然,这是由 api 返回的数据引起的,如下所示:
{"count":"",...}
Run Code Online (Sandbox Code Playgroud)
“计数”旨在表示一个数字,但不知何故或有时,服务器开发人员希望使用“”来表示 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是有没有更好的处理方法?将计数声明为字符串似乎不太直观。我假设可以有一个选项来配置改造。
更新 感谢您对提高效率和在 gson 转换器中注册 TypeAdapter 的建议的回答。但我想知道的是错误句柄是否可以由改造库本身完成。观点是,当我最初将count字段声明为int时,它可以处理来自服务器的整数和字符串类型的值,例如:
{"count":123,...} or {"count":"123",...}
Run Code Online (Sandbox Code Playgroud)
没有错误。所以我假设错误句柄可以与库本身中的整数配对行为一起完成。
提前致谢。
首先,API 响应中这种不一致的行为是不可行的。改造将无法处理这种情况。您必须按照问题中提到的那样手动处理此响应。但是您可以通过像这样的有效方式来做到这一点
class QueryResult {
Object count; // change to Object;
int getCount() {
// do the error handling
if (count instanceof Integer) {
return ((Integer) count);
} else {
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |