我已經使用rxjava和翻新功能創建了一個POST請求,它成功地點擊了我的後端服務器並記錄了用戶(我在控制檯中獲得201響應,都很好)。但是,我想要檢索返回的用戶訪問令牌,但是當我嘗試訪問rxjava結果時,它只是給了我傳遞給它的對象。我無法找到如何獲得json成功的迴應。我也證實郵差中實際上有一個響應,所以這是我如何進行這個調用。從rxjava /翻新POST請求中檢索JSON響應
這是我改造部分
@Headers("Content-Type: application/json")
@POST("api/v1/login")
fun loginTask(@Body credentials: UserLogin)
: Observable<UserLogin>
而且correspoinding 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
反序列化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
}
當我嘗試訪問compositeDisposable調用的結果 - >部分時出現混淆。它只是打印出UserLogin對象。我在這裏錯過了什麼嗎?謝謝。
它看起來像你傳遞的請求中獲得的數據是相同類型('UserLogin')....當你說「它只是打印出UserLogin對象」時,你的意思是它打印的值與你在請求中提供的值相同嗎?你在哪裏期待訪問令牌(應該是返回類型?) –
@ JohnO'Reilly嗨John。是的,它打印出結果部分中的UserLogin對象。訪問令牌的格式爲{accessToken:「token」},我現在可以在postman中清楚地看到它。所以不知何故,我沒有得到我需要的JSON響應。 –
在這種情況下,它看起來像在'fun loginTask(@Body credentials:UserLogin)中有錯誤的返回類型:Observable'...返回類型應該使用具有'accessToken'屬性的pojo] –