改造,响应错误处理(kotlin)

时间:2020-01-01 20:46:13

标签: android kotlin retrofit kotlin-android-extensions

我正在使用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>上方进行调用以获取可观察的数据。

对我来说一切正常,这是简洁的代码,但是现在我很困惑,现在如何处理响应错误?有人可以引导我吗?

1 个答案:

答案 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并执行相关操作)。