我使用改造来实现这样的接口:
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 …Run Code Online (Sandbox Code Playgroud) 我已经使用Glide下载图片很长时间了,所以这样的代码比比皆是:
GlideApp.with(getContext())
.load(imgUrl)
.into(imgView);
Run Code Online (Sandbox Code Playgroud)
突然我需要记录每个图像的网址以进行进一步分析。而不是搜索 Glade 的每个用法并像这样更改代码:
GlideApp.with(getContext())
.load(imgUrl)
.listener(requestListener) // log urls through listener
.into(imgAd);
Run Code Online (Sandbox Code Playgroud)
有什么方法可以像 Glide 的默认选项一样全局添加 requestListener ,这样我就不需要搜索和更改整个应用程序中的每个 Glide 用法?
我使用 Glide v4,并且检查了将 url 直接记录到 logcat 但不记录到本地存储以进行进一步分析的帖子。