ACRA с android: как выполнить код до сообщения о сбое

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

Пожалуйста помоги

Спасибо

Ответы на вопрос(3)

er (...);

Вы можете установить свой собственный обработчик необработанных исключений, а затем вызвать ACRA для генерации отчета:

public class My_Exception_Interceptor implements Thread.UncaughtExceptionHandler {

    /**
     * Sets up to catch an exception. 
     * Call this after initializing ACRA.
     */
    public void setUpFatalExceptionHandling() {
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    /**
     * Called by the JVM on an uncaught exception. 
     * @param t - the thread
     * @param e - the throwable
     */
    @Override
    public void uncaughtException(@Nullable Thread t, @NonNull Throwable e) {
        ...your code...
        ACRA.getErrorReporter().handleException(e, true);
    }
}
Решение Вопроса

Вот, Это может быть просто обертка вокруг существующего отправителя, пересылающая туда функцию отправки.

Внутри кода отправителя вы можете предпринять любые специальные действия перед отправкой отчета.

 Snake14 янв. 2013 г., 21:57
Идеально! Спасибо

что мне помогло, используя ACRA 4.5.0 с бэкэндом HttpSender. Я использую Acralyzer на Cloudant.

Оригинальный код:

@ReportsCrashes(
    mode = ReportingInteractionMode.DIALOG,
    resDialogText = R.string.crash_dialog_text,
    resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,

    formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
    formUriBasicAuthLogin="[restricted reporter login]",
    formUriBasicAuthPassword="[restricted reporter password]",
    reportType = org.acra.sender.HttpSender.Type.JSON,
    httpMethod = org.acra.sender.HttpSender.Method.PUT,

    formKey = ""
)

public class Application extends android.app.Application {

    public void onCreate() {
        super.onCreate();
        ACRA.init(this);

Мое приложение хранит кольцевой буфер в памяти с сообщениями журнала. Это не записывается на диск, и я не особо хотел выводить его в строку и вызывать putCustomData () каждый раз, когда добавляется запись. Поэтому вместо этого я называю мой статический "дампер" Метод VPNLog.dumpLast (), чтобы изменить отчет непосредственно перед запуском HttpSender.send (). Новый код выглядит так:

@ReportsCrashes(
    mode = ReportingInteractionMode.DIALOG,
    resDialogText = R.string.crash_dialog_text,
    resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,

    formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
    formUriBasicAuthLogin="[restricted reporter login]",
    formUriBasicAuthPassword="[restricted reporter password]",
    // reportType and httpMethod are now defined below

    formKey = ""
)

public class Application extends android.app.Application {

    public void onCreate() {
        super.onCreate();
        ACRA.init(this);
        ACRA.getErrorReporter().setReportSender(
            new HttpSender(org.acra.sender.HttpSender.Method.PUT,
                           org.acra.sender.HttpSender.Type.JSON,
                           null) {

                @Override
                public void send(CrashReportData report) throws ReportSenderException {
                    report.put(ReportField.APPLICATION_LOG, VPNLog.dumpLast());
                    super.send(report);
                }

            });

Значение, которое я добавляю, является длинной (более 100 строк) строкой; Acralyzer правильно разбивает его на отдельные пронумерованные строки.

Другой вариант - заполнить ReportField.CUSTOM_DATA несколькими парами ключ / значение:

report.put(ReportField.CUSTOM_DATA, "key0=value0\nkey1=value1\n");

Acralyzer отобразит их в таблице HTML.

 23 дек. 2014 г., 10:26
Благодарю. Это было потрясающе!

Ваш ответ на вопрос