2011-10-06 149 views
1

显示消息我创建了一个类来报告未捕获的异常,像这样的:How do I obtain crash-data from my Android application?在未捕获的异常

我的类:

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 sendError(final String error) { 
     try { 
      List<NameValuePair> values = new ArrayList<NameValuePair>(); 
      values.add(new BasicNameValuePair("error", error)); 

      HttpPost httppost = new HttpPost("http://192.168.1.1/android/recebeErros.php"); 
      httppost.setEntity(new UrlEncodedFormEntity(values)); 
      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, "Error!\nClick to finish.", 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(); 
     sendError(sw.toString()); 
    } 
} 

此类报告错误到指定的URL。但是,当消息对话框出现时,屏幕不响应。 如果我没有放置消息对话框,屏幕会正常关闭(activity.finish()),但是当我放置消息框时,会出现消息并且屏幕停止响应。

我在做什么错?

非常感谢。

+1

我使用[ACRA]解决(http://code.google.com/p/acra/) – eliangela

+1

感谢eliangela,这是非常好的图书馆。新地址:https://github.com/ACRA/acra –

回答

0

我不是100%确定这是否有效,但可能是。 尝试替换这个:

new Thread(new Runnable() { 

     public void run() { 
      MessageDialog.showOkDialog(activity, "Error!\nClick to finish.", new OnClickListener() { 

       public void onClick(DialogInterface arg0, int arg1) { 
        activity.finish(); 
       } 
      }); 
     } 
    }).start(); 

与此

runOnUiThread(new Runnable() { 

     public void run() { 
      MessageDialog.showOkDialog(activity, "Error!\nClick to finish.", new OnClickListener() { 

       public void onClick(DialogInterface arg0, int arg1) { 
        activity.finish(); 
       } 
      }); 
     } 
    });