Acra:如何从继承自 ReportSenderFactory 的自定义 class 检索令牌
Acra: How to retrieve a token from a custom class inheriting from ReportSenderFactory
我有一个在我的一项活动中生成的令牌,我希望在执行 sendHttpRequests 时能够从我的 HttpSender 检索它。
问题是我总是以空令牌结束...发生崩溃时会触发 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
}
}
根据您的要求,有几种解决方案:
- 如果您希望您的令牌成为报告的一部分,请使用
ErrorReporter.putCustomData
,使用 在 ReportSender.send
中检索它
((JSONObject)report.get(ReportField.CUSTOM_DATA.name())).optString("YOUR_KEY")
- 如果您的令牌是在没有用户交互的情况下生成的,只需在
ReportSender
中生成即可。
- 否则,使用任何永久存储,如
SharedPreferences
或普通文件。
背景资料:
Acra 在一个单独的进程中运行 ReportSender
s(因为崩溃后死掉的进程不是处理网络问题的好地方)。
这意味着大多数内存存储不能用于在应用和 ReportSender
之间共享数据。
ErrorReporter.putCustomData
有效,因为报告是临时保存到磁盘上的。
我有一个在我的一项活动中生成的令牌,我希望在执行 sendHttpRequests 时能够从我的 HttpSender 检索它。
问题是我总是以空令牌结束...发生崩溃时会触发 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
}
}
根据您的要求,有几种解决方案:
- 如果您希望您的令牌成为报告的一部分,请使用
ErrorReporter.putCustomData
,使用 在
ReportSender.send
中检索它
((JSONObject)report.get(ReportField.CUSTOM_DATA.name())).optString("YOUR_KEY")
- 如果您的令牌是在没有用户交互的情况下生成的,只需在
ReportSender
中生成即可。 - 否则,使用任何永久存储,如
SharedPreferences
或普通文件。
背景资料:
Acra 在一个单独的进程中运行 ReportSender
s(因为崩溃后死掉的进程不是处理网络问题的好地方)。
这意味着大多数内存存储不能用于在应用和 ReportSender
之间共享数据。
ErrorReporter.putCustomData
有效,因为报告是临时保存到磁盘上的。