2017-06-29 11 views
1

rxjavaとretrofitを使用してPOSTリクエストを作成し、バックエンドサーバに正常にアクセスし、ユーザをログインさせました(私のコンソールに201の応答があります)。しかし、返されたユーザーアクセストークンを取得したいのですが、rxjavaの結果にアクセスしようとすると、渡されたオブジェクトが返されます。 jsonの成功応答を得る方法をどこにも見つけることができません。私はまた、実際には郵便配達で応答があることを確認しました。だから、私がこの電話をかける方法とは何かです。ここでrxjava/retrofitの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で呼び出しによって非直列化された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オブジェクトが表示されます。私はここに何かを逃していますかありがとう。

+0

あなたがリクエストで渡したデータのようで、応答が同じタイプ( 'UserLogin')です....あなたが「単にUserLoginオブジェクトを出力します」と言うと、あなたが要求したのと同じ値を印刷しているということですか?アクセストークンはどこにあると期待していますか(返されるタイプである必要がありますか?) –

+0

@ JohnO'Reilly Hi John。はい、結果部分にUserLoginオブジェクトが表示されます。アクセストークンのフォーマットは{accessToken: "token"}です。これは私が現在郵便配達員にはっきりと見ることができます。だから何とか私は必要なJSON応答を取得していない。 –

+0

その場合、 'fun loginTask(@Body credentials:UserLogin):Observable ' ...戻り値の型は 'accessToken'プロパティを持つpojoを使用する必要があります) –

答えて

0

私は、アクセストークンプロパティを持つpojoオブジェクトではなく、UserLogin型を返していました。

@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に感謝します

関連する問題