ログインを検証するためにネットワーク呼び出しを実装しましたが、これは正常に機能しています。ログインが成功した後、ユーザーのデータを取得するために別の呼び出しを行う際に問題に直面しています。
API 呼び出しは次のとおりです。
RestApi restApi = ServiceRest.createRetrofitService(RestApi.class, UrlServer.URL_SERVER);
Observable<Response<User>> responseObservable = restApi.getUser(user);
responseObservable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.unsubscribeOn(Schedulers.io())
.subscribe(new Subscriber<Response<User>>() {
@Override
public void onCompleted() {
Log.i("LoginActivity", "[onCompleted]");
progressDialog.dismiss();
}
@Override
public void onError(Throwable e) {
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(Response<User> userResponse) {
//Do stuff to go to another Activity
}
});
------------- 編集 #1 -------------
@Tassos が提案したものを次のように実装しました。
responseUser
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<Response<User>, Observable<Response<Object>>>() {
@Override
public Observable<Response<Object>> call(Response<User> userResponse) {
Log.d("USER", userResponse.body().getName());
return restApi.getData(userResponse.body().getToken());
}
})
.doOnError(new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Toast.makeText(LoginActivity.this, "Error[doOnError]: " + throwable.toString(), Toast.LENGTH_SHORT).show();
}
})
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
Log.i("LoginActivity", "[onCompleted]");
}
@Override
public void onError(Throwable e) {
Toast.makeText(LoginActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onNext(Object result) {
Log.d("RESPONSE", result.toString());
}
});
subscribe メソッドでこのようにするのは正しいですか? onNext のオブジェクトの結果をキャストする必要がありますか?
//------------------------------------------------ ---------------------------//
ログイン成功後、Response オブジェクト User で取得したトークンを使用して別の URL を呼び出しObservable<Response<Object>> getData(@Header("Authorization") String token);
、ヘッダーの Authorization として別の API 呼び出し ( ) に送信したいと考えています。flatMap と zip を使用してみましたが、このタスクを達成できませんでした。
何かアドバイスはありますか?この概念は私にとって新しいものです。