Android 从rxjava/Reformation POST请求检索JSON响应

Android 从rxjava/Reformation POST请求检索JSON响应,android,retrofit,rx-java,kotlin,retrofit2,Android,Retrofit,Rx Java,Kotlin,Retrofit2,我已经使用rxjava和改型创建了一个POST请求,它成功地命中了我的后端服务器并让用户登录(我在控制台中得到了201响应,一切正常)。但是,我希望随后检索返回的用户访问令牌,但是当我尝试访问rxjava结果时,它只会给我传递给它的对象。我无法找到如何获得json成功响应。我还证实了《邮递员》中确实有回应,所以这与我打电话的方式有关 这是我的改装部分 @Headers("Content-Type: application/json") @POST("api/v1/login")

我已经使用rxjava和改型创建了一个POST请求,它成功地命中了我的后端服务器并让用户登录(我在控制台中得到了201响应,一切正常)。但是,我希望随后检索返回的用户访问令牌,但是当我尝试访问rxjava结果时,它只会给我传递给它的对象。我无法找到如何获得json成功响应。我还证实了《邮递员》中确实有回应,所以这与我打电话的方式有关

这是我的改装部分

@Headers("Content-Type: application/json")
    @POST("api/v1/login")
    fun loginTask(@Body credentials: UserLogin)
            : Observable<UserLogin>
最后是我的后勤行动

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调用的result->部分时,会出现混乱。它只是打印出UserLogin对象。我是不是遗漏了什么?谢谢

结果表明,我返回的是UserLogin类型,而不是具有访问令牌属性的pojo对象

将我的改装调用更改为
@Headers(“内容类型:application/json”)
@POST(“api/v1/登录”)
趣味登录任务(@Body凭证:UserLogin)
:可观察的

以及创建一个新模型

数据类AccessToken(
@SerializedName(“accessToken”)val电子邮件:字符串
)


我现在可以打印出代币了。幸亏@john oreilly

证明我返回的是UserLogin类型,而不是带有访问令牌属性的pojo对象

将我的改装调用更改为
@Headers(“内容类型:application/json”)
@POST(“api/v1/登录”)
趣味登录任务(@Body凭证:UserLogin)
:可观察的

以及创建一个新模型

数据类AccessToken(
@SerializedName(“accessToken”)val电子邮件:字符串
)


我现在可以打印出代币了。感谢@john oreilly

,看起来您在请求中传递的数据和在响应中获得的数据类型相同(
UserLogin
)……当您说“它只是打印出UserLogin对象”时,您的意思是它打印的值与您在请求中提供的值相同吗?您希望访问令牌在哪里(应该是返回类型吗?@JohnO'Reilly Hi John。是的,它在结果部分打印出一个UserLogin对象。访问令牌的格式是{accessToken:“token”},我现在可以在postman中清楚地看到。因此,不知何故,我没有得到我需要的JSON响应。在这种情况下,看起来您在
fun loginTask(@Body credentials:UserLogin):Observable
…返回类型应该使用具有
accessToken
属性的pojo)@JohnO'Reilly ahh。让我试试。Thanks@JohnOReilly我很难确定在哪里需要将对象从UserLogin更改为具有accesstoken属性的对象。我会将改装功能更改为类似于fun loginTask(@Body credentials:UserLogin):Observable的功能吗?如果是这样的话,我如何向我的服务器提供凭据,同时还需要Accesstoken返回类型看起来您在请求中传递的数据和在响应中获得的数据是相同类型的(
UserLogin
)……当您说“它只是打印出UserLogin对象”时,您的意思是它打印的值与您在请求中提供的值相同吗?您希望访问令牌在哪里(应该是返回类型吗?@JohnO'Reilly Hi John。是的,它在结果部分打印出一个UserLogin对象。访问令牌的格式是{accessToken:“token”},我现在可以在postman中清楚地看到。因此,不知何故,我没有得到我需要的JSON响应。在这种情况下,看起来您在
fun loginTask(@Body credentials:UserLogin):Observable
…返回类型应该使用具有
accessToken
属性的pojo)@JohnO'Reilly ahh。让我试试。Thanks@JohnOReilly我很难确定在哪里需要将对象从UserLogin更改为具有accesstoken属性的对象。我会将改装功能更改为类似于fun loginTask(@Body credentials:UserLogin):Observable的功能吗?如果是这样,我如何向服务器提供凭据,同时还需要Accesstoken返回类型
data class UserLogin(
    @SerializedName("email") val email: String,
    @SerializedName("password") val password: String
)
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
        }