当前位置: 首页 > 工具软件 > acra > 使用案例 >

android hashmap 写入文件,android – ACRA 4.9.0:如何将ACRA报告写入文件(在应用程序数据文件夹中)...

步胜
2023-12-01

我想使用最新的Acra 4.9.0在文本文件中编写崩溃报告.

我可以举例说明这个最新版本.

我尝试使用可用的文档.

Acra已启用

但它,不是写在文件中.

myApp

package com.myApp;

import org.acra.ACRA;

import android.app.AlertDialog;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.view.KeyEvent;

import android.view.View;

import com.myApp.Application.AppLauncher;

import com.myApp.interfaces.AppEvents;

import com.myApp.R;

import com.utils.Config;

import com.utils.Constants;

import com.utils.DeviceValidator;

public class myApp extends FragmentActivity

{

private AppLauncher appLauncher = null;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

if(!ACRA.isACRASenderServiceProcess())

{

setContentView(R.layout.activity_myApp);

appLauncher = new AppLauncher();

appLauncher.registerEventListener(appEventsListener);

appLauncher.initApp(this);

}

}

@Override

public void onPause() {

super.onPause();

if(!DeviceValidator.isDeviceValid())

{

return;

}

appLauncher.activityOnPause();

}

@Override

protected void onRestart() {

super.onRestart();

}

@Override

protected void onStart()

{

super.onStart();

}

@Override

public void onResume()

{

super.onResume();

appLauncher.activityOnResume();

}

}

AcraApplication

package com.myAPP;

import org.acra.ACRA;

import org.acra.ReportField;

import org.acra.ReportingInteractionMode;

import org.acra.annotation.ReportsCrashes;

import org.acra.sender.HttpSender.Method;

import android.app.Application;

@ReportsCrashes(

formUri = "http://staging.jemtv.com/variable_dump/index.php",

customReportContent = { ReportField.REPORT_ID, ReportField.DEVICE_ID, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.STACK_TRACE, ReportField.CUSTOM_DATA, ReportField.LOGCAT },

httpMethod = Method.POST,

reportSenderFactoryClasses = org.acra.util.MyOwnSenderFactory.class,

mode = ReportingInteractionMode.SILENT

)

public class AcraApplication extends Application

{

public AcraApplication()

{

super();

}

@Override

public void onCreate() {

super.onCreate();

ACRA.init(this);

}

}

MyOwnSender

package org.acra.util;

import java.io.File;

import java.io.FileOutputStream;

import org.acra.ReportField;

import org.acra.collector.CrashReportData;

import org.acra.config.ACRAConfiguration;

import org.acra.sender.ReportSender;

import org.acra.sender.ReportSenderException;

import android.content.Context;

import android.support.annotation.NonNull;

import android.util.Log;

public class MyOwnSender implements ReportSender {

private static final String FILE_NAME = "AcraReport.txt";

//private final Map mMapping = new HashMap();

//private FileWriter crashReport = null;

MyOwnSender(Context context, @NonNull ACRAConfiguration config)

{

Log.d("testAcra", "MyOwnSender created");

/* File logFile = new File(context.getFilesDir().getPath() "/" FILE_NAME, FILE_NAME);

try {

crashReport = new FileWriter(logFile, true);

} catch (IOException e) {

e.printStackTrace();

}*/

}

@Override

public void send(Context context, CrashReportData report) throws ReportSenderException

{

// Iterate over the CrashReportData instance and do whatever

// you need with each pair of ReportField key / String value

String finalReport = createCrashReport(report);

String tempFile = context.getFilesDir().getPath() "/" FILE_NAME;

try

{

File detailedFile = new File(tempFile);

if(!detailedFile.exists())

detailedFile.createNewFile();

FileOutputStream stream = new FileOutputStream(detailedFile, true);

stream.write(finalReport.getBytes());

Log.d("testAcra","adding to file: " stream);

stream.close();

}

catch (Exception e)

{

e.printStackTrace();

}

/*final Map finalReport = remap(report);

try {

BufferedWriter buf = new BufferedWriter(crashReport);

Set> set = reportBody.entrySet();

Iterator> i = set.iterator();

while (i.hasNext()) {

Map.Entry me = (Entry) i.next();

buf.append("[" me.getKey() "]=" me.getValue());

}

buf.flush();

buf.close();

} catch (IOException e) {

Log.e("TAG", "IO ERROR", e);

}*/

}

private String createCrashReport(CrashReportData crashReportData){

StringBuilder body = new StringBuilder();

body.append("ReportID : " crashReportData.getProperty(ReportField.REPORT_ID))

.append("\n")

.append("DeviceID : " crashReportData.getProperty(ReportField.DEVICE_ID))

.append("\n")

.append("AppVersionName : " crashReportData.getProperty(ReportField.APP_VERSION_NAME))

.append("\n")

.append("Android Version : " crashReportData.getProperty(ReportField.ANDROID_VERSION))

.append("\n")

.append("CustomData : " crashReportData.getProperty(ReportField.CUSTOM_DATA))

.append("\n")

.append("STACK TRACE : \n" crashReportData.getProperty(ReportField.STACK_TRACE))

.append("\n")

.append("LogCAT : \n" crashReportData.getProperty(ReportField.LOGCAT));

return body.toString();

}

/* private Map remap(Map report) {

Setfields = ACRA.getConfig().getReportFields();

final Map finalReport = new HashMap(report.size());

for (ReportField field : fields)

{

if (mMapping == null || mMapping.get(field) == null)

finalReport.put(field.toString(), report.get(field));

else

finalReport.put(mMapping.get(field), report.get(field));

}

return finalReport;

}*/

}

MyOwnSenderFactory

package org.acra.util;

import org.acra.config.ACRAConfiguration;

import org.acra.sender.ReportSender;

import org.acra.sender.ReportSenderFactory;

import android.content.Context;

import android.support.annotation.NonNull;

public class MyOwnSenderFactory implements ReportSenderFactory {

// NB requires a no arg constructor.

/*MyOwnSenderFactory()

{

Log.e("testAcra", "MyOwnSenderFactory created");

}*/

@Override

@NonNull

public ReportSender create(@NonNull Context context, @NonNull ACRAConfiguration config) {

// TODO Auto-generated method stub

return new MyOwnSender(context, config);

}

}

解决方法:

因为我使用的是jar文件而不是aar

在我的清单中我失踪了

android:name="org.acra.sender.SenderService"

android:exported="false"

android:process=":acra" />

enter code here

那就是为什么SendeService在Acra中使用的原因并没有开始.来源:https://www.icode9.com/content-1-303501.html

 类似资料: