从Retrofit2和rxjava中的错误获取URL

时间:2018-10-16 09:05:58

标签: android kotlin retrofit2 rx-java2 rx-android

我正在使用带有rxjava的改造2发送休息请求。和Gson作为json解析。

如果Gson无法解析json字符串,则抛出java.lang.IllegalStateException和一些消息。我的问题是我不知道该错误发生在哪个网址上。

如果错误类型为HttpException,我可以从中获取URL,但是在其他类型中,例如java.lang.IllegalStateExceptionTimeoutException,则可以访问错误消息,而我看不到该URL。

我该如何在rxjava中实现url和翻新捕获。

那是我的代码:

mainApi.getSomething(offset, limit, distance, latitude, longitude)
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({it:Response<Something>
                val entities = it.body()?.entities
                callBack.onResponse(it.raw(), entities)
            }, {//it:throwable
                if (t is HttpException) {
                   Log.d("logUrl", "HttpException : ${t.response().raw().request().url()} : ${t.code()} :${t.message()}")
                } else//something like IllegalStateException or TimeoutException
                     Log.d("logUrl", "Failure : ${t.localizedMessage}")
                })
               })

1 个答案:

答案 0 :(得分:1)

new Consumer()方法始终提供有关任何类型错误的消息,即使GSON错误

 mGetDeviceObserver.subscribeOn(Schedulers.newThread())
         .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<RegData>() {
    @Override
    public void accept(@NonNull RegData mRegData) throws Exception {
    }
}, new Consumer<Throwable>() {
    @Override
    public void accept(@NonNull Throwable t) throws Exception {
       if(t instanceof HttpException){ Log.d("path",((HttpException) t).response().raw().request().url().url().toString()); }
    }
});