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オブジェクトが表示されます。私はここに何かを逃していますかありがとう。
あなたがリクエストで渡したデータのようで、応答が同じタイプ( 'UserLogin')です....あなたが「単にUserLoginオブジェクトを出力します」と言うと、あなたが要求したのと同じ値を印刷しているということですか?アクセストークンはどこにあると期待していますか(返されるタイプである必要がありますか?) –
@ JohnO'Reilly Hi John。はい、結果部分にUserLoginオブジェクトが表示されます。アクセストークンのフォーマットは{accessToken: "token"}です。これは私が現在郵便配達員にはっきりと見ることができます。だから何とか私は必要なJSON応答を取得していない。 –
その場合、 'fun loginTask(@Body credentials:UserLogin):Observable' ...戻り値の型は 'accessToken'プロパティを持つpojoを使用する必要があります) –