我已经使用rxjava和retrofit创建了一个POST请求,该请求成功点击我的后端服务器并将用户登录(我在我的控制台得到201响应,一切都很好)。但是,我想检索返回的用户访问令牌,但是当我尝试访问rxjava结果时,它只是给我传递给它的对象。无处可以找到如何获得json成功响应。我也确认了邮递员实际上有一个回应,所以这与我如何打电话有关。
这是我的Retrofit部分
@Headers("Content-Type: application/json")
@POST("api/v1/login")
fun loginTask(@Body credentials: UserLogin)
: Observable<UserLogin>
和相应的API函数
class ApiFunctions(val apiService: LunchVoteApi) {
fun provideHello(): io.reactivex.Observable<Hello> {
return apiService.helloMessage()
}
fun loginTask(email: String, password: String): io.reactivex.Observable<UserLogin> {
val credentials: UserLogin = UserLogin(email, password)
return apiService.loginTask(credentials)
}
}
由Gson反序列化的UserLogin模型
data class UserLogin(
@SerializedName("email") val email: String,
@SerializedName("password") val password: String
)
最后是我的LoginActivity中的调用
val loginTask = ApiProvider.provideLoginTask()
override fun doInBackground(vararg params: Void): Boolean? {
// TODO: attempt authentication against a network service.
try {
// Simulate network access.
// Thread.sleep(2000)
compositeDisposable.add(
loginTask.loginTask(mEmail, mPassword)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe ({
result ->
System.out.println(result.toString())
}, { error ->
System.out.println(error)
})
)
} catch (e: InterruptedException) {
return false
}
当我尝试访问结果时出现混乱 - &gt; compositeDisposable调用的一部分。它只打印出UserLogin对象。我在这里错过了什么吗?谢谢。
答案 0 :(得分:0)
原来我正在返回我的UserLogin类型而不是带有访问令牌属性的pojo对象。
将我的改装电话改为@Headers("Content-Type: application/json")
@POST("api/v1/login")
fun loginTask(@Body credentials: UserLogin)
: Observable<AccessToken>
创建新模型
data class AccessToken(
@SerializedName("accessToken") val email: String
)
我现在可以打印出令牌了。感谢@ john-oreilly