【问题标题】:How to handle globally parsing errors using GsonConverter如何使用 GsonConverter 处理全局解析错误
【发布时间】: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


【解决方案1】:

使用转换器和呼叫适配器混合解决了我的问题)https://github.com/square/retrofit/issues/2267/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2016-06-16
    • 2015-08-04
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多