Seja uma página de login simples ou uma página de envio de pedidos complexa, a verificação front-end do formulário (como o nome de login e a senha atende aos requisitos básicos antes que o botão de login possa ser iluminado) é uma etapa indispensável. Este artigo mostra como usar o rxjava para lidar facilmente com problemas de verificação antes do envio do formulário. O exemplo usa uma página de login simples no Android.
Resumo do conteúdo
Métodos de verificação tradicionais
Operador CombineLatest
Use combinelatest para processar a verificação de formulário
A diferença entre combinelatest e zip
O código de amostra mostrado neste artigo está localizado em RxandroidDemo, consulte o arquivo de loginatividade
Métodos de verificação tradicionais
Aqui, usamos o exemplo mais simples para ilustrar, como mostrado na figura acima, uma entrada de email e uma entrada de senha e abaixo está um botão de login. O botão abaixo será iluminado apenas se o conteúdo da caixa de entrada de email contiver @ caracteres e o conteúdo da caixa de entrada de senha for maior que 4.
Primeiro de tudo, se você usar o EditText ou o herdar da EditText, em geral, usa o AddTextChangedListener para ouvir seu conteúdo. No entanto, é óbvio que a ativação ou não do botão de login deve ser determinada ao mesmo tempo por email e senha. Ambos só podem ser iluminados. Portanto, no relógio de texto do email, devemos não apenas julgar se o email atende às condições, mas também determinar se a senha atende às condições ao mesmo tempo, o que levará facilmente a vários julgamentos.
Imagine se você estiver enviando um formulário de pedido, com mais de uma dúzia de caixas de entrada, e cada conteúdo de entrada atende às condições ao mesmo tempo, você pode acender o botão "enviar". Quão doloroso é - todas as mudanças na caixa de entrada devem ser usadas para determinar se o conteúdo das outras dúzias de caixas de entrada atende o mesmo (de fato, as outras dúzias de caixas de entrada não mudaram neste momento)
Operador CombineLatest
O CombineLatest é um operador comum fornecido pelo próprio Rxjava, que aceita dois ou mais observáveis e um fechamento de funcx. Quando qualquer um dos observáveis recebidos transmite dados, o valor combinelatest (último) de cada observável é combinado para transmiti -los ao fechamento do Funcx para o processamento. O ponto é
1.CombineLatest armazenará o valor mais recente de cada observável
2. Qualquer observável emite um novo valor e desencadeia a operação -> "Combine todo o último valor do observável e envie para a função"
Use combinelatest para processar a verificação de formulário
Primeiro, escrevemos o método de verificação de email e senha. Um precisa conter os caracteres @, e o outro requer mais de 4 caracteres:
private boolean isEmailvalid (string email) {// TODO: Substitua -o por seu próprio email de retorno lógico.contains ("@"); } private boolean ispasswordValid (string senha) {// TODO: Substitua -o por sua própria lógica retornar senha.length ()> 4;}Em seguida, criamos observáveis para email e senha, respectivamente, e o valor emitido é o conteúdo das alterações em cada EditText. O valor de retorno do método de retorno de chamada de chamada é o parâmetro de entrada do método posterior do TextWatcher:
Obsertable <string> observableMail = observável.create (new observable.OnsubScribe <string> () {@Override public void Call (Final Subscriter <? Super String> assinante) {MemailView.addTextChangedListener (novo textwatcher () @Override Public Void BeAtExtChanged (sharsengen stride, swovert), o @Override Public Void BeFeTectChanged (Charsengen S), o sirmride Intelight) OntextChanged void (charsequence s, int start, int antes, int contagem) {} @Override public void posterior Obsertable <string> obsertablepassword = obsertable.create (new observable.Onsubscribe <string> () {@Override public void Call (Final Subscriter <? Super String> assinante) {mPasswordView.addTextChangedListener (novo textwatcher () {@Override Public void befortChanged OntextChanged void (charsequence s, int start, int antes, int contagem) {} @Override public void posteriorFinalmente, use o combinelastest para combinar o observável e o observável e o Padrant para verificar:
Obsertable.combineLatest (correio observável, obsertablepassword, novo func2 <string, string, boolean> () {@Override public boolean Call (string email, string senha) {return isEmailvalid (email) && isPasswordValid (senha);}}). public void onError (jogável e) {} @Override public void onNext (verificação booleana) {if (verifique) {mesailsigninbutton.setenabled (true);Verificar no OnNext é o resultado da combinação dos dois depois de combinar o melhor.
Consulte o método BindView () LoginActivity ()
Aqui, mesmo que o formulário seja muito complexo, é realmente fácil de expandir se você precisar:
1. Encapsular um observável para cada edittext
2. Reescreva esta frase e adicione nova lógica:
retornar isEmailValid (email) && isPasswordValid (senha);
Você acha que é preciso muito código duplicado para encapsular um observável para cada EditText? Não se preocupe, Jake Wharton há muito pensa que o RxTextView no RXBinding pode resolver esse problema:
Obsertable <Charsequence> observável senha) {return isEmailValid (email.toString ()) && isPasswordValid (senha.toString ()); (verifique) {MemailSigninButton.SetEnabled (true);Consulte o método BindViewByrxBinding () da LoginActivity ()
A diferença entre combinelatest e zip
O ZIP é um operador que é um pouco semelhante ao combinelatest e os parâmetros que aceita são dois ou mais observáveis e um fechamento. Mas a diferença é:
1.ZIP é combinar cada observável estritamente em ordem, como os primeiros dados do Observablea e os primeiros dados do Observableb são combinados e transmitidos ao Funcx para processamento, os Nés de dados dos dois são combinados e transmitidos ao Funcx para processamento e assim por diante.
2.ZIP não aciona o processamento do fechamento quando qualquer observável transmite dados, mas aguarda que os dados do Nth Observable sejam totalmente transmitidos antes de acionar.
O ZIP é geralmente usado para integrar dados organizados em ordem por várias partes.
O exposto acima é uma breve análise do método do rxjava para lidar com problemas complexos de verificação de formulários introduzidos pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!