[vc_row][vc_column][vc_column_text] Novamente dando umas pinceladas no Android agora mostro como criar um loading enquanto alguma tarefa ocorre em background, ideal para requisições a APIs e consultas longas.
public class MainActivity extends Activity {
private EditText campoDeValor; private EditText campoDeNomeDaDespesa; private EditText campoDeComplemento; private String valorFinal; private String despesa; private String complemento;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xml);
// Necessário para requisições Http
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
gerarBotaoEAcoes();
}
}
No método gerar botão e ações vamos carregar os inputs e o botão que dará a possibilidade de realizar um cadastro.
public void gerarBotaoEAcoes() {
final Button btnCadastrarDepesa =
(Button) findViewById(R.id.botao_de_cadastro);
btnCadastrarDespesa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
campoDeValor = (EditText) findViewById(R.id.valor);
campoDeNomeDaDespesa =
(EditText) findViewById(R.id.descricao);
campoDeComplemento =
(EditText) findViewById(R.id.complemento);
valorFinal = campoDeValor.getText().toString();
despesa = campoDeNomeDaDespesa.getText().toString();
complemento = campoDeComplemento.getText().toString();
/* Sem realizar tratamento algum, apenas
prosseguindo no exemplo */
gravaDespesa(valorFinal, despesa, complemento);
}
});
}
Naturalmente que teremos de criar o método para salvar a despesa enviando os dados fornecidos para a API.
public void gravarDespesa(final String valorFinal,
final String despesa, final String compelemento) {
// aqui começamos a exibir o loading
final ProgressDialog dialog =
new ProgressDialog(MainActivity.this);
dialog.setMessage("Enviando dados... aguarde");
dialog.setIndeterminate(false);
dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(true);
dialog.show();
new Thread(new Runnable() {
// O processamento deve ocorrer em "run"
@Override
public void run() {
responseOk = realizaRequisicao(
valorFinal, despesa, complemento);
}
// a resposta deve ser exibida em "runOnUIThread"
public void runOnUIThread(new Runnable() {
@Override
public void run(){
// e aqui encerramos o loading
dialog.dismiss();
String mensagem = "Não foi possível cadastrar a " +
"despesa, por favor tente novamente.";
if( responseOk.equals(true) ) {
mensagem = "Despesa adicionada com sucesso!";
}
/* Exibindo a mensagem de status da requisição
em um toast apenas para simplificar */
Toast.makeText(
MainActivity.this,
"Informação: rn" + mensagem,
Toast.LENGTH_LONG
).show();
}
});
});
}
Obviamente que você pode perceber que será necessário criar mais um método, o realizaRequisição. Como não é o foco deste post, apenas o criarei retornando um true de imediato.
public Boolean realizaRequisicao
(String valorFinal,
String despesa, String complemento
) { return true; }
Por enquanto é isto, espero que este post seja útil para quem mais precisar criar um loading e acabar enfrentando as mesmas dificuldades que encontrei (não saber ao certo como proceder). Lembre-se, exibir um status ao usuário de seu App/site/sistema é longe de uma questão visual mas sim de usabilidade. Caso não concorde com o que acabei de dizer sugiro uma leitura sobre UX Design que com certeza sua opinião mudará (se estiver aberto à mudanças claro).[/vc_column_text][us_cta title="Interesse em TDD?" title_size="h3" color="custom" bg_color="#422b72" text_color="#ffffff" btn_link="url:https%3A%2F%2Ftddcomphp.com.br||target:%20_blank|" btn_label="Conheça meu livro" btn_size="20px" btn_style="4"]