gpt4 book ai didi

android - 改造 2.6.0 : Custom Coroutines CallAdapterFactory

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:40:18 25 4
gpt4 key购买 nike

我需要在我的 api 中进行自定义错误处理,并且我想在新版本的 Retrofit 中使用协程。由于我们不必再使用 Deferred,我们自己的 Jake Wharton 一个月前在 reddit 上写了这篇文章

enter image description here

https://github.com/square/retrofit/blob/master/samples/src/main/java/com/example/retrofit/RxJavaObserveOnMainThread.java

但是我在正确创建 CallAdapterFactory 时遇到了问题。

具体来说,我不明白:“委托(delegate)给内置工厂,然后将值包装在密封类中”

是否有人已经在使用此设置可以提供帮助?

这是当前代码

sealed class Results<out T: Any> {
class Success<out T: Any>(val response: T): Results<T>()
class Failure(val message: String, val serverError: ServerError?): Results<Nothing>()
object NetworkError: Results<Nothing>()
}


class ResultsCallAdapterFactory private constructor() : CallAdapter.Factory() {

companion object {
@JvmStatic
fun create() = ResultsCallAdapterFactory()
}

override fun get(returnType: Type, annotations: Array<Annotation>, retrofit: Retrofit): CallAdapter<*, *>? {
return try {
val enclosedType = returnType as ParameterizedType
val responseType = getParameterUpperBound(0, enclosedType)
val rawResultType = getRawType(responseType)
val delegate: CallAdapter<Any,Any> = retrofit.nextCallAdapter(this,returnType,annotations) as CallAdapter<Any,Any>
if(rawResultType != Results::class.java)
null
else {
object: CallAdapter<Any,Any>{
override fun adapt(call: Call<Any>): Any {
val response = delegate.adapt(call)
//What should happen here?
return response
}

override fun responseType(): Type {
return delegate.responseType()
}

}
}
} catch (e: ClassCastException) {
null
}

}
}

最佳答案

我已经创建了这样一个工厂的例子,你可以找到它here on GitHub .另请查看类似的问题:How to create a call adapter for suspending functions in Retrofit? .

关于android - 改造 2.6.0 : Custom Coroutines CallAdapterFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57625272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com