[RESOLVIDO] Mostrar mensagem caso aconteça uma exceção não capturada

Olá pessoal!

Fiz uma classe para reportar as exceções não capturadas, conforme mostra nesse site: http://stackoverflow.com/questions/601503/how-do-i-obtain-crash-data-from-my-android-application.

Esta é minha classe:

[code]package br.com.tdta.service.sender;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import br.com.tdta.service.view.MessageDialog;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

/**
*

  • @author eliangela
    */
    public class ErrorSender implements Thread.UncaughtExceptionHandler {

    private Activity activity;

    public ErrorSender(Activity activity) {
    this.activity = activity;
    }

    public void enviaErro(final String erro) {
    try {
    List<NameValuePair> valores = new ArrayList<NameValuePair>();
    valores.add(new BasicNameValuePair(“erro”, erro));

     	HttpPost httppost = new HttpPost("http://192.168.1.1/android/recebeErros.php");
     	httppost.setEntity(new UrlEncodedFormEntity(valores));
     	HttpClient httpclient = new DefaultHttpClient();
     	httpclient.execute(httppost);
     } catch (IOException ex) {
     }
    

    }

    public void uncaughtException(Thread thread, Throwable trw) {
    new Thread(new Runnable() {

     	public void run() {
     		MessageDialog.showOkDialog(activity, "Ocorreu um erro.\nClique para finalizar.", new OnClickListener() {
    
     			public void onClick(DialogInterface arg0, int arg1) {
     				activity.finish();
     			}
     		});
     	}
     }).start();
    
     StringWriter sw = new StringWriter();
     PrintWriter pw = new PrintWriter(sw);
     trw.printStackTrace(pw);
     pw.close();
     enviaErro(sw.toString());
    

    }
    }[/code]

Essa classe está reportando os erros na URL que eu quero. Mas o problema é que a tela está travando quando aparece a caixa de mensagem.
Se eu não coloco a caixa de mensagem, a tela fecha tranquilo (com o comando activity.finish();), mas se eu coloco a caixa de mensagem, a mensagem aparece, mas a tela trava. O que eu estou fazendo de errado??

Obrigada

Tente dar um dismiss na Dialog antes.

Olá, Marky!

Não funcionou direito aqui :frowning: ! A janela fica tudo preta.
Se eu fechar normalmente pelo botao FECHAR (esse botão chama o metodo finish()), a minha activity fecha normalmente. Mas com o dialog.dismiss(), está ficando travado numa tela preta.

Alguma outra idéia?

olá,
Você está numa thread diferente da UI thread.
Defina um handler na activity e através dela você poderá acessar a tela.

Olá, A H Gusukuma!

Estou pesquisando sobre como definir um handler na activity, mas não encontrei nada que me ajudasse.
Você tem algum link ou exemplo?

Obrigada

Olá, pessoal!

Resolvi meu problema com essa API: ACRA

Só estou com um pouco de dificuldades pra enviar o StackTrace via POST aqui… mas no site diz que é possivel!

Obrigada a todos

Com atraso, mas tenta o seguinte:

Na activity inclui:

public Handler handler = new Handler();

Na classe postada, substitui:

 private Runnable enviaMensagem = new Runnable() {
	public void run() {
                MessageDialog.showOkDialog(activity, "Ocorreu um erro.\nClique para finalizar.", new OnClickListener() {   
  
                    public void onClick(DialogInterface arg0, int arg1) {   
                        activity.finish();   
                    }   
                });   

	}
 }



 public void uncaughtException(Thread thread, Throwable trw) {   
        new Thread(new Runnable() {   
              public void run() {   
              	activity.handler.post(enviaMensagem);   
        		 
  	      }   
        }).start();   
.
.
.

Obrigada A H Gusukuma!
Vou tentar isso e depois posto o resultado.

Não estava querendo usar uma Library só pra isso… se eu usar o ACRA, minha aplicação vai ficar muito grande so por causa dos logs.

Vou tentar nesse fim de semana e daí falo.

Até mais

Olá, A H Gusukuma!
infelizmente não funcionou o que vc me sugeriu.

vou continuar usando o ACRA aqui.

Obrigada a todos pela ajuda.