Olá pessoal, estou com um problema que está me tirando o sono.
-- Tenho uma activity principal e nela um action de busca, quando eu clicar no submit da busca preciso que ele execute uma consulta no servidor.
Meu problema é que não importa o que eu faça pra que a tarefa execute em segundo plano, a tela trava e meu app dá erro.
Alguem teria um exemplo de uma consulta na internet que deixasse uma progressbar na tela enquanto consulta e não travasse?
Vou deixar meu código aqui pra quem puder me ajudar
//Aqui está a ação que chama a thread
public boolean onQueryTextSubmit(String query) {
InputMethodManager imm = (InputMethodManager) getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
BuscaServidor b = new BuscaServidor(context);
b.execute();
Toast.makeText(getBaseContext(), "Sua pesquisa aqui...", Toast.LENGTH_SHORT).show();
setSupportProgressBarIndeterminateVisibility(true);
return false; }
//Aqui está a classe Async que chama o método de busca no servidor
//Classe responsável por carregar a lista de produtos do servidor
//==============================================================
public class BuscaServidor extends AsyncTask<Integer, String, Integer> {
private static final String TAG = "BUSCADOR";
private ProgressDialog progress;
private Context context;
private ArrayList<Produto> listaExibir = null;
public BuscaServidor(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
//Cria novo um ProgressDialogo e exibe
progress = new ProgressDialog(context);
progress.setMessage("Aguarde...");
progress.show();
}
@Override
protected Integer doInBackground(Integer... arg0) {
ProdutoResource p = new ProdutoResource();
//ArrayList<Produto> listaServidor = p.buscaTodos();
//Toast.makeText(context, listaServidor.get(0).getMarca(), Toast.LENGTH_SHORT).show();
return 1;
}
@Override
protected void onPostExecute(Integer result) {
//Cancela progressDialogo
Toast.makeText(context, "EXECUTOU", Toast.LENGTH_SHORT).show();
progress.dismiss();
}
@Override
protected void onProgressUpdate(String... values) {
//Atualiza mensagem
progress.setMessage(values[0]);
}
}
//E aqui é o método da classe onde é feita realmente a busca
public ArrayList<Produto> buscaTodos(){
ArrayList<Produto> retorno=null;
try
{
HttpURLConnection connection = null;
URL url = new URL("http://192.168.0.106:8080/portal-servicos/produtos/todos");
connection = (HttpURLConnection)url.openConnection();
InputStream content = connection.getInputStream();
if(content !=null){
//Log.i(TAG, "Lendo resposta");
InputStream in = content;
String body = IOUtils.toString(in, "UTF-8");
String body2 = body.replace("{\"produto\":[", "[");
String body3 = body2.replace("}]}", "}]");
//Log.i(TAG, body3);
try {
if (in != null) {
Type listType = new TypeToken<ArrayList<Produto>>() {}.getType();
List<Produto> retorno1 = new Gson().fromJson(body3, listType);
for (int i = 0; i < retorno1.size(); i++) {
Log.i(TAG, retorno1.get(i).getMarca());
}
}
} catch (final Exception e) {
e.printStackTrace();
Log.i(TAG, "ERRO");
}
}
}catch (Exception e) {
e.printStackTrace();
Log.i(TAG, "ERRO");
}
return retorno;
}
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
0 comentários:
Postar um comentário