Android改造句柄响应可以是JSON或字符串
我们用于登录最近更改的用户的API,如果用户需要执行操作,则在主体中发送字符串,而不是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
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()))
})