Unabhängig davon, ob es sich um eine einfache Anmeldeseite oder eine komplexe Auftragsseite handelt, ist ein unverzichtbarer Schritt ein unverzichtbarer Schritt, um die grundlegenden Anforderungen zu erfüllen, bevor die Anmeldeschaltfläche beleuchtet werden kann (z. Dieser Artikel zeigt, wie Sie mit RXJAVA vor der Einreichung von Verifizierungsproblemen problemlos die Verifizierungsprobleme behandeln. Das Beispiel verwendet eine einfache Anmeldeseite auf Android.
Inhaltszusammenfassung
Traditionelle Überprüfungsmethoden
Kombinationsbetreiber
Verwenden Sie Combinelatest, um die Überprüfung der Formularverifizierung zu verarbeiten
Der Unterschied zwischen Kombination und Reißverschluss
Der in diesem Artikel gezeigte Beispielcode befindet sich in Rxandroiddemo. Siehe die LoginActivity -Datei
Traditionelle Überprüfungsmethoden
Hier verwenden wir das einfachste Beispiel, um zu veranschaulichen, wie in der obigen Abbildung gezeigt, eine E -Mail -Eingabe und eine Kennworteingabe und unten eine Anmeldetaste. Die folgende Schaltfläche wird nur beleuchtet, wenn der Inhalt des E -Mail -Eingabefelds @ Zeichen enthält und der Inhalt des Kennworteingabefelds größer als 4 ist.
Wenn Sie EditText oder Erben von editText verwenden, verwenden Sie zunächst im Allgemeinen AddTextChangedListener, um den Inhalt anzuhören. Es ist jedoch offensichtlich, dass die Aktivierung der Anmeldetaste gleichzeitig per E -Mail und Passwort ermittelt werden muss. Beide können nur beleuchtet werden. Daher müssen wir im Textwatcher von E -Mail nicht nur beurteilen, ob die E -Mail die Bedingungen erfüllt, sondern auch feststellen, ob das Passwort gleichzeitig die Bedingungen erfüllt, was leicht zu mehreren Urteilen führt.
Stellen Sie sich vor, Sie senden ein Bestellformular mit mehr als einem Dutzend Eingangsboxen, und jeder Eingabeinhalt erfüllt gleichzeitig die Bedingungen. Sie können die Schaltfläche "Senden" beleuchten. Wie schmerzhaft es ist - jede Änderung des Eingangsfelds muss verwendet werden, um festzustellen, ob der Inhalt der anderen Dutzend Eingangsboxen dasselbe erfüllt (tatsächlich haben sich die anderen Dutzend Eingangsboxen zu diesem Zeitpunkt nicht geändert).
Kombinationsbetreiber
Combinelatest ist ein gemeinsamer Bediener, der von Rxjava selbst bereitgestellt wird und zwei oder mehr Observablen und einen FuncX -Verschluss akzeptiert. Wenn eines der eingehenden Observablen Daten überträgt, wird kombinelatester (zuletzt) von jedem Beobachtbaren kombiniert, um sie für die Verarbeitung an den Funcx -Verschluss zu übergeben. Der Punkt ist
1.Combinelatest speichert den jüngsten Wert jedes beobachtbaren Werts
2. Jedes Observable emittiert einen neuen Wert und löst die Operation aus -> "Kombinieren Sie den letzten Wert des Beobachtbaren miteinander und senden Sie sie an die Funktion" "
Verwenden Sie Combinelatest, um die Überprüfung der Formularverifizierung zu verarbeiten
Zunächst schreiben wir die Überprüfungsmethode von E -Mail und Passwort. Einer muss @ Zeichen enthalten, und der andere benötigt mehr als 4 Zeichen:
private boolean isemailValid (String -E -Mail) {// todo: Ersetzen Sie dies durch Ihre eigene Logik -Rückgabe -E -Mail.Contains ("@"); } private boolean ispasswordValid (String -Passwort) {// todo: Ersetzen Sie dies durch Ihre eigene Logik -Rückgabekennwort.length ()> 4;}Anschließend erstellen wir Observable für E -Mail bzw. Passwort, und der emittierte Wert ist der Inhalt der Änderungen in jedem Bearbeitungsbereich. Der Rückgabewert der Call -Rückrufmethode ist der eingehende Parameter der AfterTextChanged -Methode in TextWatcher:
Observable <string> ObservableEmail = Observable.create (new Observable public void ontextChanged (charsequence s, int start, int, int count) {} @Override public void AfterTextChanged (editable s) {subscriber.onnext (s.toString ()); Observable <string> ObservablePassword = Observable.create (new Observable @Override public void ontextChanged (Charsequence S, int, int vor, int count) {} @Override public void AfterTextChanged (editable s) {subscriber.onnext (S.ToString ());Verwenden Sie schließlich Combinelastest, um Observableemail und ObservablePassword zu kombinieren, um zu überprüfen:
Observable.comBinelatest (Observableemail, ObservablePassword, neuer func2 <String, String, boolean> () {@Override public boolean call (String -E -Mail, String -Passwort) {return isemailValid (E -Mail) && ispasswordValid (Passwort);}}). Abonnieren (New Subsicriber <boolan> () | @Override public void onError (throwable e) {} @Override public void Onnext (boolean verifizieren) {if (verifizieren) {memailSigninButton.stenabled (true);Überprüfen Sie, ob Sie in Onnext nach dem Kombinieren von Lautstärken die beiden kombiniert haben.
Siehe BindView () -Methode von LoginActivity
Auch wenn das Formular sehr komplex ist, ist es tatsächlich einfach zu erweitern, wenn Sie:
1.. Einkapseln Sie ein Beobachtbar für jeden EditText
2. Schreiben Sie diesen Satz neu und fügen Sie neue Logik hinzu:
IsemailValid (E -Mail) && isPasswordValid (Passwort) zurückgeben;
Glauben Sie, dass es viel doppelter Code braucht, um einen Beobachtbaren für jeden EditText zu verkörpern? Mach dir keine Sorgen, Jake Wharton hat lange gedacht, dass die rxTextView in RxBinding dieses Problem lösen kann:
Observable<CharSequence> ObservableEmail = RxTextView.textChanges(mEmailView);Observable<CharSequence> ObservablePassword = RxTextView.textChanges(mPasswordView);Observable.combineLatest(ObservableEmail, ObservablePassword, new Func2<CharSequence, CharSequence, Boolean>() { @Override public Boolean call(CharSequence email, Charsequence password) {return isemailvalid (E -Mail.toString ()) && ispasswordValid (password.toString ()); verifizieren) {if (verifizieren) {memailsigninButton.setEnabled (true);Siehe BindViewByRxBinding () -Methode von LoginActivity
Der Unterschied zwischen Kombination und Reißverschluss
ZIP ist ein Operator, der dem Kombinelat etwas ähnlich ist, und die von ihm akzeptierten Parameter sind zwei oder mehr Observable und ein Verschluss. Aber der Unterschied ist:
1.ZIP soll jedes beobachtbare in der Reihenfolge kombinieren, z.
2.ZIP löst keine Schließverarbeitung aus, wenn beobachtbare Daten überträgt, sondern darauf wartet, dass die n -ten Daten jedes Observabel vollständig übertragen werden, bevor sie ausgelöst werden.
ZIP wird im Allgemeinen verwendet, um Daten zu integrieren, die in der Reihenfolge von mehreren Parteien angeordnet sind.
Das obige ist eine kurze Analyse der Methode von Rxjava zur Bewältigung komplexer Form -Überprüfungsprobleme, die vom Editor eingeführt wurden. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!