Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android改造句柄响应可以是JSON或字符串_Android_Retrofit2 - Fatal编程技术网

Android改造句柄响应可以是JSON或字符串

Android改造句柄响应可以是JSON或字符串,android,retrofit2,Android,Retrofit2,我们用于登录最近更改的用户的API,如果用户需要执行操作,则在主体中发送字符串,而不是JSON(转换为对象)。因此,我需要能够处理这个问题 我将可观察到的响应更改为处理ANY,如下所示: @POST("api/v1/user/login") fun postLogin(@Body body: LoginBody): Observable<Response<Any>> @POST(“api/v1/user/login”) 有趣的post

我们用于登录最近更改的用户的API,如果用户需要执行操作,则在主体中发送字符串,而不是JSON(转换为对象)。因此,我需要能够处理这个问题

我将可观察到的响应更改为处理
ANY
,如下所示:

    @POST("api/v1/user/login")
    fun postLogin(@Body body: LoginBody): Observable<Response<Any>>
@POST(“api/v1/user/login”)

有趣的postLogin(@Body:LoginBody):可观察为什么不将响应类型保留为String,然后稍后再处理?如果一个对象未能转换到另一个对象,您可以尝试转换到该对象。在您的改装中,添加到字符串转换器工厂。
postLogin(LoginBody(username, password))
                                .subscribeOn(Schedulers.io())
                                .observeOn(AndroidSchedulers.mainThread())
                                .subscribe({
                                    if (it.isSuccessful) {

                                        val res = LoginRemote.parseResponse(it as Response<LoginRemote>)
                                        if (res.result is Result.Ok) {
                                            res.result.data.uid?.let { sessionData?.uid = it }
                                            res.result.data.username?.let { sessionData?.username = it }
                                            res.result.data.email?.let { sessionData?.email = it }
                                            res.result.data.phoneType?.let { sessionData?.phoneType = it }
                                            res.result.data.phone?.let { sessionData?.phone = it }
                                            res.result.data.verified?.let { sessionData?.verified = it }
                                            res.result.data.role?.let { sessionData?.role = it }
                                            res.result.data.gender?.let { sessionData?.gender = it }
                                            res.result.data.countryOfResidence?.let { sessionData?.countryOfResidence = it }
                                        }
                                        acceptTermsResponse.value = res
                                    } else {
                                        acceptTermsResponse.value = LoginResponse(listOf(LoginResponse.ErrorType.Generic()))
                                    }
                                }, {
                                    ERRORS HERE --> acceptTermsResponse.value = LoginResponse(listOf(LoginResponse.ErrorType.Generic()))
                                })