Независимо от того, является ли это простой страницей входа или сложной страницей подачи порядка, проверка фронтальной формы (например, имя входа и пароль соответствует основным требованиям, прежде чем кнопка входа может быть освещена), является незаменимым шагом. В этой статье показано, как использовать Rxjava для легкости выбора проблем проверки перед подачей формы. В примере используется простая страница входа на Android.
Сводка контента
Традиционные методы проверки
CombineLatest Operator
Используйте CombinElatest, чтобы обработать проверку формы
Разница между CombinElatest и Zip
Пример кода, показанный в этой статье, расположен в RxandroidDemo, см. Файл LoginActivity
Традиционные методы проверки
Здесь мы используем самый простой пример, чтобы проиллюстрировать, как показано на приведенном выше рисунке, ввод электронной почты и ввода пароля, а ниже - кнопка для входа. Кнопка ниже будет освещена только в том случае, если содержимое блока ввода электронной почты содержит символы @, а содержимое окна ввода пароля больше 4.
Прежде всего, если вы используете EditText или наследуйте от EditText, вообще говоря, вы используете AddTextChangedListener для прослушивания его контента. Тем не менее, очевидно, что включение или нет кнопки входа в систему должно быть определено одновременно по электронной почте и паролям. Оба они могут быть только освещены. Следовательно, в текстовом часе электронной почты мы должны не только судить, соответствует ли электронная почта, но и определить, соответствует ли пароль одновременно с условиями, что легко приведет к нескольким суждениям.
Представьте себе, что если вы отправляете форму заказа, на нем более десятка поля ввода, и каждый входной контент одновременно соответствует условиям, вы можете зажечь кнопку «Отправить». Насколько это болезненно - каждое изменение в ящике ввода должно использоваться для определения того, соответствует ли содержание других дюжины вводов с тем же (на самом деле, другие дюжины входных ящиков в настоящее время не изменились))
CombineLatest Operator
CombinElatest - это обычный оператор, предоставляемый самим Rxjava, который принимает два или более наблюдаемых и закрытие Funcx. Когда любое из входящих наблюдаемых передает данные, комбинированное значение (последнее) из каждого наблюдаемого объединяется, чтобы передать их в закрытие Funcx для обработки. Дело в том, чтобы
1.combinelatest будет хранить самое последнее значение каждого наблюдаемого
2. Любое наблюдаемое излучает новое значение и запускает операцию -> «Объедините все последнее значение наблюдаемого и отправляйте на функционирование»
Используйте CombinElatest, чтобы обработать проверку формы
Во -первых, мы пишем метод проверки электронной почты и пароля. Один должен содержать символы @, а другой требует более 4 символов:
Private Boolean IseMailValid (String Email) {// TODO: заменить это на свою собственную логику return Email.Contains ("@"); } Private Boolean IspassWordValid (String Password) {// toDo: замените это на свой собственный логический возврат пароля. length ()> 4;}Затем мы создаем Observables для электронной почты и пароля соответственно, и испускаемое значение - это содержимое изменений в каждом редактике. Возвращаемое значение метода вызова вызовов является входящим параметром метода AftertextChanged в TextWatcher:
Observable<String> ObservableEmail = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(final Subscriber<? super String> subscriber) { mEmailView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void OntextChanged (chareSectence s, int start, int, int count) {} @override public void Observable<String> ObservablePassword = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(final Subscriber<? super String> subscriber) { mPasswordView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void OntextChanged (chareSectence s, int start, int, int count) {} @override public voidНаконец, используйте CombinElastest для объединения VasebleMail и ObservablePassword, чтобы проверить:
Visemble.combinelatest (vaselemail, visembayPassword, новый Func2 <String, String, boolean> () {@Override public boolean call (строка Электронная почта, String passwer) {return isemailValid (электронная почта) && ispasswordvalid (пароль);}}). Подписать (new sepcriber <bolean> (@aoverride oblide oblide opoide oblieride opoide opoide oblide) @Override public onerror (Throwable e) {} @Override public void onnext (boolean verify) {if (verify) {memailSigninbutton.setEnabled (true);Проверьте в Onnext результат объединения двух после объединения.
См. Метод LoginActivity BindView ()
Здесь, даже если форма очень сложная, на самом деле ее легко расширить, если вам нужно:
1. Инкапсулируйте наблюдаемый для каждого редактирования
2. Перепишите это предложение и добавьте новую логику:
вернуть isemailValid (email) && ispasswordvalid (пароль);
Как вы думаете, требуется много дублированного кода, чтобы инкапсулировать наблюдаемый для каждого редактирования? Не волнуйтесь, Джейк Уортон давно думал, что RxTextView в RxBinding может решить эту проблему:
Наблюдаемый <CHARESESCENDE> vaselemail = rxTextView.textChanges (memailView); Vosivable <chareSectence> vaseparsablePassword = rxTextView.textChanges (mpasswordView); visefable.combineLatest (vasemablemail, vasepasblepassword, new Func2 <chareSecence, charequence, boolean> ( @@aosean pulplectride, booleanceerence, booleance, booleance, booleance. пароль) {return iseMailValid (email.toString ()) && ispasswordValid (password.tostring ()); {if (verify) {memailsigninbutton.setenabled (true);См. Метод LoginActivity BindViewByrxBinding ()
Разница между CombinElatest и Zip
ZIP - это оператор, который несколько похож на CombinElatest, а параметры, которые он принимает, представляют собой два или более наблюдаемых и закрытие. Но разница в:
1.zip предназначен для строгого сочетания каждого наблюдаемого по порядку, например, первые данные ObservableA и первые данные ObservableB объединяются и передаются в FUNCX для обработки, NTH Данные двух объединяются и передаются в FUNCX для обработки и так далее.
2.ZIP не запускает обработку закрытия, когда какие -либо наблюдаемые передают данные, но ожидает, что NTH наблюдаемых NTH будут полностью передаваться перед запусками.
ZIP обычно используется для интеграции данных, расположенных для нескольких сторон.
Выше приведено краткий анализ метода rxjava для решения сложных задач проверки формы, введенных редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!