ログインを検証するためにネットワークコールを実装しましたが正常に動作しています。私はちょうど、ログインが成功した後にユーザーのデータを取得するために別の呼び出しを行うことにいくつかの問題に直面しています。RxJavaとRetrofit 2を使ってログイン成功後何かをしてください2
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 -------------:ここ
は、APIの呼び出しです
私は@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());
}
});
を購読方法で、このように行うのは、それは正しいですか? onNextのObject結果をキャストする必要がありますか?
// ------------------------------------------- -------------------------------- //
私は、ログインが成功した後、 ResponseオブジェクトUserを介して取得したトークンを使用して別のURLに送信し、ヘッダーのAuthorizationとして他のAPI呼び出し(Observable<Response<Object>> getData(@Header("Authorization") String token);
)に送信します。 flatMapとZipを使ってみましたが、この作業を実行できませんでした。
アドバイスはありますか?このコンセプトは私には新しいものです。
実際、私はそれについて考えていました。他の呼び出しを行う前にダイアログを閉じる必要はありません。ダイアログを保持し、メッセージを「ユーザーの確認」から「ユーザーのデータを取得する」に変更する必要があります。ダイアログが終了した最後の呼び出しの終了。ありがとう! あなたの提案を実装しようとする問題に直面しています。自分の質問を編集して、私が行ったことを表示します。 –