gpt4 book ai didi

android - 记录后重新抛出 UncaughtExceptionHandler 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:29 24 4
gpt4 key购买 nike

在我的应用程序类中,我试图在强制关闭发生之前捕获它,因此我可以记录它然后重新抛出它,以便 android 可以处理它。我这样做是因为一些用户不报告强制关闭。

我在 eclipse 中开发,eclipse 不允许我重新抛出异常。它显示一条错误消息“Unhandled exception type Throwable: Surround with try/catch”。如何重新抛出异常?

public class MainApplication extends Application
{
@Override
public void onCreate()
{
super.onCreate();

try
{
//Log exception before app force closes
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
AnalyticsUtils.getInstance(MainApplication.this).trackEvent(
"Errors", // Category
"MainActivity", // Action
"Force Close: "+ex.toString(), // Label
0); // Value
AnalyticsUtils.getInstance(MainApplication.this).dispatch();

Toast.makeText(MainApplication.this, "Snap! Something broke. Please report the Force Close so I can fix it.", Toast.LENGTH_LONG);

//rethrow the Exception so user can report it
//throw ex; //<-- **eclipse is showing an error to surround with try/catch**
}
});

} catch (Exception e)
{
e.printStackTrace();
}
}

最佳答案

抱歉,不是 Android 专家 - 但看起来你不能抛出 ex 因为你的方法签名“void uncaughtException(Thread, Throwable)”没有声明它“抛出”任何东西。

假设您正在覆盖一个 API 接口(interface)并且 (a) 不能修改这个签名并且 (b) 不想因为您将它从上下文中丢弃,您是否可以改用装饰器模式并且基本上将默认的 UncaughtExceptionHandler 实现子类化以记录您的消息,然后让它照常进行处理?

编辑:未经测试,但这可能看起来有点像:

    final UncaughtExceptionHandler subclass = Thread.currentThread().getUncaughtExceptionHandler();
Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// your code
AnalyticsUtils.getInstance(MainApplication.this).trackEvent(
"Errors", // Category
"MainActivity", // Action
"Force Close: "+ex.toString(), // Label
0); // Value
AnalyticsUtils.getInstance(MainApplication.this).dispatch();
Toast.makeText(MainApplication.this, "Snap! Something broke. Please report the Force Close so I can fix it.", Toast.LENGTH_LONG).show();

// carry on with prior flow
subclass.uncaughtException(thread, ex);
}
});

关于android - 记录后重新抛出 UncaughtExceptionHandler 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com