【发布时间】:2022-08-21 03:22:36
【问题描述】:
我正在使用 RxJava、改造、GsonConverter 工厂。我需要在全局解析改造响应时处理错误。我尝试编写自定义解析器,但我无法访问响应 URL 以将其传递给我的分析服务。是否有任何可行的方法来正确实施它
class GsonResponseBodyConverter<T>(
private val gson: Gson,
private val adapter: TypeAdapter<T>,
private val analytics: Analytics
) : Converter<ResponseBody, T> {
private val errorResponseSubject = PublishSubject.create<Pair<Throwable, String>>()
init {
val errorResponseFlowable = errorResponseSubject.toFlowable(BackpressureStrategy.BUFFER)
val disposable = Flowables.combineLatest(
errorResponseFlowable,
Mapper::exceptionToEntity
)
.flatMap { analytics.saveError(it).andThen(Flowable.just(Unit)) }
.subscribeOn(Schedulers.IO)
.subscribe({ /* no-op */
print(it)
}, RxThrowable.printStackTrace(logger))
}
@Throws(IOException::class)
override fun convert(value: ResponseBody): T {
val jsonReader = gson.newJsonReader(value.charStream())
return value.use {
runCatching {
val result = adapter.read(jsonReader)
if (jsonReader.peek() != JsonToken.END_DOCUMENT) {
throw JsonIOException(\"JSON document was not fully consumed.\")
}
result
}.getOrElse { error ->
errorResponseSubject.onNext(Pair(error, URL - I don\'t have access to url here!))
throw error
}
}
}
}
-
您的
GsonResponseBodyConverter类已经具有analytics属性;你不能在convert函数中访问它来获取URL吗?
标签: android gson retrofit rx-java custom-error-handling