小编Pai*_*ang的帖子

改造 - 如何在改造中错误处理 NumberFormatException?

我使用改造来实现这样的接口:

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)

java android json retrofit retrofit2

6
推荐指数
1
解决办法
2845
查看次数

如何记录 Glide 的每个请求 url?

我已经使用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 但不记录到本地存储以进行进一步分析的帖子。

java android kotlin android-glide

0
推荐指数
1
解决办法
1154
查看次数

标签 统计

android ×2

java ×2

android-glide ×1

json ×1

kotlin ×1

retrofit ×1

retrofit2 ×1