간단한 로그인 페이지이든 복잡한 주문 제출 페이지이든, 양식의 프론트 엔드 확인 (예 : 로그인 이름 및 암호와 같은 로그인 버튼을 조명하기 전에 기본 요구 사항을 충족 함)은 필수 단계입니다. 이 기사는 양식 제출 전에 검증 문제를 쉽게 처리하기 위해 Rxjava를 사용하는 방법을 보여줍니다. 이 예제는 Android에서 간단한 로그인 페이지를 사용합니다.
내용 요약
전통적인 검증 방법
combinelatest 연산자
Compinelatest를 사용하여 양식 검증을 처리하십시오
combinelatest와 zip의 차이
이 기사에 표시된 샘플 코드는 RxAndroiddemo에 있으며 LoginActivity 파일을 참조하십시오.
전통적인 검증 방법
여기에서 가장 간단한 예제를 사용하여 위 그림과 같이 이메일 입력 및 비밀번호 입력을 설명하고 아래는 로그인 버튼입니다. 아래 버튼은 이메일 입력 상자의 내용에 @ 문자가 포함되어 있고 암호 입력 상자의 내용이 4보다 큰 경우에만 조명됩니다.
우선, editText를 사용하거나 EditText에서 상속하는 경우 일반적으로 AddTextChangedListener를 사용하여 콘텐츠를들을 수 있습니다. 그러나 로그인 버튼의 활성화 여부는 이메일과 비밀번호로 동시에 결정해야합니다. 둘 다 켜질 수 있습니다. 따라서 이메일의 TextWatcher에서 이메일이 조건을 충족하는지 여부를 판단해야 할뿐만 아니라 암호가 동시에 조건을 충족하는지 여부를 판단해야합니다.
입력 상자에 12 개가 넘는 입력 상자와 함께 주문 양식을 제출하고 있으며 각 입력 컨텐츠가 동시에 조건을 충족하면 "제출"버튼을 비출 수 있습니다. 얼마나 고통 스러운지 - 입력 상자의 모든 변경 사항은 다른 12 개의 입력 상자의 내용이 동일하게 충족하는지 여부를 결정하는 데 사용해야합니다 (실제로 다른 12 개의 입력 상자가 변경되지 않았습니다).
combinelatest 연산자
CombinElatest는 Rxjava 자체가 제공하는 공통 연산자로서 둘 이상의 관찰 가능 및 FUNCX 폐쇄를 허용합니다. 들어오는 관찰 가능성이 데이터를 전송하는 경우, 각 관찰 가능한 각 관측 가능한 값의 조합 값 (마지막)을 결합하여 처리를 위해 FUNCX 클로저로 전달합니다. 요점은
1. CombinElatest는 각 관찰 가능한 각각의 최신 값을 저장합니다.
2. 관찰 가능한 모든 것은 새로운 값을 방출하고 작전을 트리거합니다 -> "관찰 가능한 모든 마지막 값을 결합하여 기능으로 보냅니다."
Compinelatest를 사용하여 양식 검증을 처리하십시오
먼저, 우리는 이메일과 비밀번호의 확인 방법을 작성합니다. 하나는 @ 문자를 포함해야하고 다른 하나는 4 자 이상이 필요합니다.
개인 부울 isemailvalid (문자열 이메일) {// todo : 이것을 자신의 논리 반환 이메일로 바꾸십시오. } private boolean ispasswordvalid (문자열 암호) {// todo : 이것을 자신의 논리 반환 비밀번호로 바꾸십시오. length ()> 4;}그런 다음 각각 전자 메일과 비밀번호에 대한 관찰 정보를 생성하고 방출 된 값은 각 edittext의 변경 사항 내용입니다. Call Callback 메소드의 반환 값은 TextWatcher에서 AfterTextChanged 메소드의 들어오는 매개 변수입니다.
Observable <String> ObservableEmail = Observable.create (new Observable.onSubscribe <string> () {@override public void call (최종 가입자 <? super string> 가입자) {memailView.AddTextChangedListener () 공개 void ontextChanged (charSequence s, int start, int count) {} public void aftertextChanged (editable s) {subscriber.onnext (s.toString ()}); Observable <String> ObservablePassword = Observable. @override public void ontextChanged (charSeverence s, int start, int count) {} @extable void aftertextChanged (subscriber.onnext);마지막으로 CombinElastest를 사용하여 ObservableAmail과 ObservablePassword를 결합하여 다음을 확인하십시오.
Observable.combinelatest (ObservableEmail, ObservablePassword, new func2 <String, String, Boolean> () {@override public boolean call (string email, string password) {return isemailvalid (이메일) && ispasswordvalid (password);}}). @override public void onerror (Throwable e) {} @override public void onnext (boolean verify) {memailsigninbutton.setenabled (true);onnext에서 확인은 결합 된 후 두를 결합한 결과입니다.
loginactivity의 bindview () 메소드를 참조하십시오
여기서 양식이 매우 복잡하더라도 필요한 경우 실제로 확장하기가 쉽습니다.
1. 각 edittext에 대해 관찰 가능한 것을 캡슐화하십시오
2.이 문장을 다시 작성하고 새로운 논리를 추가하십시오.
return isemailvalid (이메일) && ispasswordvalid (비밀번호);
각 editText에 대해 관찰 가능한 것을 캡슐화하는 데 많은 중복 코드가 필요하다고 생각하십니까? Jake Wharton은 rxbinding의 rxtextView 가이 문제를 해결할 수 있다고 오랫동안 생각해 왔습니다.
Observable <CharSequence> ObservableEmail = rxTextView.TextChanges (MemailView); Observable <CharSection> ObservablePassword = rxTextView.TextChanges (mpasswordView); Observable.comBinElatest (ObservableAma, New Func2 <Chareceed, Chareverence, Boleann, Boleman, BOLENT charEdection password) {return iseMailValid (email.toString ()) && ispasswordValid (password.toString ()); 확인) {if (verify) {memailsigninbutton.setenabled (true) {memailsigninbutton.setenabled (false}});loginactivity의 bindviewbyrxbinding () 메소드를 참조하십시오
combinelatest와 zip의 차이
Zip은 CombinElatest와 다소 유사한 연산자이며, 허용하는 매개 변수는 둘 이상의 관찰 및 폐쇄입니다. 그러나 차이점은 다음과 같습니다.
1.ZIP는 ObservableA의 첫 번째 데이터와 같은 각각의 관측 가능한 각각의 순서대로 결합하여 관찰 가능 B의 첫 번째 데이터가 결합되어 FUNCX로 전송되며,이 둘의 N 번째 데이터는 처리를 위해 FUNCX로 전송됩니다.
2.ZIP는 관찰 가능한 데이터가 데이터를 전송할 때 폐쇄 처리를 트리거하지 않지만 트리거링 전에 각각의 NTH 데이터가 완전히 전송 될 때까지 기다립니다.
zip은 일반적으로 여러 당사자가 순서대로 정리 된 데이터를 통합하는 데 사용됩니다.
위의 것은 편집자가 도입 한 복잡한 양식 검증 문제를 처리하기 위해 Rxjava 방법에 대한 간단한 분석입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!