Tecnologia do Blogger.
RSS

[androidbrasil-dev] Tarefa de busca do meu app trava a tela

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.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário