Android - Acra不报告

时间:2015-11-02 11:32:57

标签: java android acra

我正在使用ACRA作为错误记者,我将 acra-4.6.1.jar 添加到我的项目并制作了这个类

ReportApp.java

package org.qtproject.example.ourmessenger;

import org.acra.*;
import org.acra.annotation.*;
import org.qtproject.qt5.android.bindings.QtApplication;
import android.app.Application;



@ReportsCrashes(
    formUri = "http://######/#####/######/####.php",
    formUriBasicAuthLogin = "root",
    formUriBasicAuthPassword = "#######",
    mode = ReportingInteractionMode.TOAST,
    forceCloseDialogAfterToast = false, 
    resToastText = R.string.crash_toast_text
    )
public class ReportApp extends Application  {

    @Override
    public void onCreate() {
        super.onCreate();

        ACRA.init(this);
    }
}

然后,我在AndroidManifest上编辑了我的android:name:

AndoridManifest.xml

<application android:hardwareAccelerated="true" android:name="org.qtproject.example.ourmessenger.ReportApp" android:label="@string/app_name" android:icon="@drawable/icon">

我还在</manifest>之前的AndroidManifest.xml末尾添加了这一行:

 <CheckBoxPreference android:key="acra.enable" android:title="@string/pref_enable_acra" android:summaryOn="@string/pref_acra_enabled" android:summaryOff="@string/pref_acra_disabled" android:defaultValue="true"/>

我用这个

String i=null;
i.contains("kj");

用于测试ACRA。实际上它不起作用。我没有向mainActivity添加任何内容。

MainActivity.java

 .
 .
public class MainActivity extends QtActivity implements SensorEventListener
{
    .
    .
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        Context context = getApplicationContext();
        SharedPreferences appPref = getSharedPreferences("isFirstRun", 0);
        boolean isFirstRun = appPref.getBoolean("isFirstRun", true);
        .
        .

    }
     .
     .
}

它不仅没有显示任何TOAST消息,而且也没有向服务器报告。任何建议?

2 个答案:

答案 0 :(得分:1)

您需要在@ReportsCrashes中为您的目标服务提及请求类型。对于基本上是POST或PUT服务的formUri = "http://######/#####/######/####.php"服务,请在@ReportsCrashes块中添加httpMethod = org.acra.sender.HttpSender.Method.POSThttpMethod = org.acra.sender.HttpSender.Method.PUT

有关详细信息,请参阅doc

答案 1 :(得分:1)

我也尝试将ACRA与qt-android项目一起使用,它也不会报告任何内容,无论是调用abort()还是在别处强制出错。

我看到它正确初始化,但是当我强制崩溃时,我只是得到常规的Android崩溃消息,没有吐司或电子邮件。 private bool IsRequestTransferred() { System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(); int requestCompletionCount = 0; foreach (var stackFrame in stackTrace.GetFrames()) { System.Reflection.MethodBase methodBase = stackFrame.GetMethod(); if (methodBase.DeclaringType.Name == "UnsafeIISMethods" && methodBase.Name == "MgdIndicateCompletion") { if (++requestCompletionCount == 2) { return true; } } } return false; } void Application_Error(object sender, EventArgs e) { bool isRequestTransferred = IsRequestTransferred(); }

也许Acra无法在android-qt应用程序(c ++)中工作?