我正在使用Retrofit 2.6.3。
我现在可以使用Retrofit直接返回数据模型:
interface WikiApiService {
// Here declare that the function returns Observable<Student>
@GET("student/")
fun getStudent(@Query("id") sid: Int): Observable<Student>
companion object {
fun create(): StudentApiService {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("https://foo.bar.com/")
.build()
return retrofit.create(StudentApiService::class.java)
}
}
}
然后我可以在UI层的fun getStudent(@Query("id") sid: Int): Observable<Student>
上方进行调用以获取可观察的数据。
对我来说一切正常,这是简洁的代码,但是现在我很困惑,现在如何处理响应错误?有人可以引导我吗?
答案 0 :(得分:0)
赞:
getStudent(1)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subsribe({ result ->
// Success
}, { error ->
// Log the error here using your log mechanism
// Switch on type and perform relevant actions
when (error) {
is HttpException -> {
// Based on the code, perform relevant action
when (error.code) {
404 -> // Handle not found
500 -> // Handle internal server error
else -> // Handle generic code here
}
}
else -> {
// Handle non http exception here
}
}
})
换句话说,您需要订阅结果才能真正进行API调用。您需要先subscribeOn
Schedulers.io
以确保API调用在后台线程上运行,然后再observeOn
AndroidSchedulers.mainThread
以确保将响应传递到主线程。
如果在API调用期间发生错误,则将调用错误lambda,在这里您将执行特定于错误的逻辑(即检查是否发生HttpException并执行相关操作)。