java - Acra:如何从继承自 ReportSenderFactory 的自定义类中检索 token

标签 java android kotlin acra

我有一个在我的 Activity 之一中生成的 token ,并且我希望在执行 sendHttpRequests 时能够从我的 HttpSender 检索它。

问题是我总是以空 token 结束...发生崩溃时会触发 sendHttpRequests() 方法。

(我是 Acra 的初学者)

@AcraCore(reportSenderFactoryClasses = [SenderFactory::class])
class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        ACRA.init(this)
    }
}
class SenderFactory : ReportSenderFactory {

    override fun create(context: Context, config: CoreConfiguration): ReportSender = AcraSender(config)
}

class AcraSender(
    config: CoreConfiguration,
    method: Method = POST,
    type: StringFormat? = null
) : HttpSender(config, method, type) {

    override fun sendHttpRequests(
        configuration: CoreConfiguration,
        context: Context,
        method: Method,
        contentType: String,
        login: String?,
        password: String?,
        connectionTimeOut: Int,
        socketTimeOut: Int,
        headers: Map<String, String>?,
        content: String,
        url: URL,
        attachments: MutableList<Uri>
    ) {

        //I want to retrieve my TOKEN here
    }
}

最佳答案

根据您的要求,有几种解决方案:

  • 如果您希望 token 成为报告的一部分,请使用 ErrorReporter.putCustomData,并在 ReportSender.send 中使用
  • 检索它
((JSONObject)report.get(ReportField.CUSTOM_DATA.name())).optString("YOUR_KEY")
  • 如果您的 token 是在没有用户交互的情况下生成的,只需在 ReportSender 中生成即可。
  • 否则,请使用任何持久存储,例如 SharedPreferences 或纯文件。
<小时/>

背景信息:

Acra 在单独的进程中运行 ReportSender(因为崩溃后的死亡进程不适合进行网络操作)。

这意味着大多数内存存储不能用于在应用和 ReportSender 之间共享数据。

ErrorReporter.putCustomData 可以正常工作,因为报告会临时保存到磁盘。

关于java - Acra:如何从继承自 ReportSenderFactory 的自定义类中检索 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59072462/

相关文章:

android - 为什么 IO Dispatchers 在 Kotlin 协程中创建超过 64 个线程?

arrays - 使用映射的数组的自定义属性委托(delegate)

java - 有效证书上的 SSL 连接错误

java - 在实例化时定义 Arraylist 的大小有什么好处吗

java - Math.cos() & Math.sin() 如何使用?

java - java中的clone()方法是如何工作的?

android - 退出应用程序后在下拉导航菜单中保持选中的项目

Android SurfaceView用图片填充背景

java - 使用Spring在Rest API中返回实体

java - 从我的 ListView 中添加 ItemOnClick,使用 JSON 从 MYSQL 中获取数据