Показать сообщение о необработанном исключении - PullRequest
1 голос
/ 07 октября 2011

Я создал класс, чтобы сообщать о неперехваченных исключениях, например: Как получить данные о сбоях из моего приложения для Android?

Мой класс:

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 Ответ

0 голосов
/ 07 октября 2011

Я не уверен на 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();  
                }  
            });  
        }  
    }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...