3
вот мой код:как использовать RxBinding & Retrofit?
// Observable from RxView
RxView.clicks(mBtnLogin)
.throttleFirst(500, TimeUnit.MILLISECONDS)
.subscribe(new Action1<Void>() {
@Override
public void call(Void aVoid) {
String userName = mEditUserName.getText().toString();
String passWord = mEditPassWord.getText().toString();
if (TextUtils.isEmpty(userName)) {
Toast.makeText(LoginActivity.this, R.string.input_user_name, Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(passWord)) {
Toast.makeText(LoginActivity.this, R.string.input_pass_word, Toast.LENGTH_SHORT).show();
return;
}
LoginAction action = Constants.retrofit().create(LoginAction.class);
// Observable from Retrofit
Observable<String> call = action.login(userName, MD5.encode(passWord));
call.subscribeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
System.out.println("completed");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(String s) {
System.out.println("next" + s);
}
});
}
});
Есть ли способ, вы могли бы объединить Наблюдаемые из RxView и Observable от модернизации?
Я думаю, что код является уродливым и не соответствует спецификациям ReactiveX.
что такое «apiService? http-запрос должен быть в фоновом потоке, а затем получить имя пользователя и пароль в mainthread, как это сделать? –
В моем примере 'apiService' - это сервис, который вы создаете с помощью Retrofit. Он вызывает вызов в фоновом потоке с помощью 'Schedulers.io()', а затем возвращает результаты в основной поток. – Orbit
, но вы должны получить имя пользователя и пароль, когда RxView.clicks (mButton), вы забудете этот шаг. –