Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Dispositivos Móveis / Aula
O AsyncTask é uma interface que o Android fornece para que os desenvolvedores possam lançar operações bloqueantes em uma nova thread, na qual executará a requisição e retornará o resultado à thread principal, sem que essa seja bloqueada e sem a necessidade do desenvolvedor tratar eventos de comunicação assíncrona.
A utilização dessa classe é simples. Implemente uma subclasse privada em sua Activity que implemente os métodos doInBackground() e onPostExecute(). Esses métodos são os responsáveis por executar as requisições em uma thread separada em background e atualizar a thread principal, respectivamente. Uma vez implementados, basta chamar o método execute() dessa subclasse em sua Activity e a requisição será processada, de forma assíncrona. Vejamos a Listagem 8 para entender melhor como funciona esse processo. Implementaremos o mesmo código do exemplo anterior, apenas omitindo os métodos de conexão que se manterão iguais.
public class HTTPURLCommunication extends Activity {
private static String ENDERECO ="http://10.0.2.2:8080/aula14/ServletHello";
Context context = getApplicationContext();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Requisicoes().execute("Aluno");
}
public static String connect() {
...
}
public static String connect(String id) {
...
}
private class Requisicoes extends AsyncTask<String, Void, String> {
protected String doInBackground(String... id) {
return connect(id[0]);
}
protected void onPostExecute(String result) {
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
}
}
}
Perceba que a classe AsyncTask precisa de três tipos em sua declaração. Esses tipos são o tipo dos parâmetros, o tipo do progresso e o tipo do resultado final. O tipo do progresso raramente é utilizado. Ele serve para determinar que tipo será retornado quando houver progresso na requisição que a thread está executando. Já os outros dois parâmetros são extremamente importantes. O primeiro deles indica o tipo dos parâmetros que o método doInBackground() receberá para utilizar na requisição. O último declara o tipo do objeto que será retornado pelo método doInBackground(). O retorno desse método é automaticamente passado como parâmetro para o método onPostExecute(), então, podemos dizer que esse valor é também o tipo do parâmetro do método onPostExecute(). Com essas informações, você deve ser capaz de implementar requisições a serem executadas em segundo plano, da maneira que todas as conexões dentro de uma aplicação devem ser feitas.
É importante notar que sempre que precisarmos utilizar o valor retornado pela requisição, deveremos fazer isso dentro do método onPostExecute(), pois como a requisição será executada em outra thread, a thread principal vai continuar e pode terminar por utilizar o valor antes de ele terminar de ser obtido na outra thread, o que vai gerar um erro. Já no caso do valor ser utilizado somente dentro do onPostExecute(), podemos ter certeza de que ele só será chamado após a execução completa da requisição solicitada. Com esse conhecimento sobre como as requisições web devem ser feitas dentro de uma aplicação Android, encerramos a nossa aula. Até a próxima, que será nossa última!
Versão 5.3 - Todos os Direitos reservados