Android 显示来自UncaughtExceptionHandler的Toast消息

Android 显示来自UncaughtExceptionHandler的Toast消息,android,android-toast,android-application-class,Android,Android Toast,Android Application Class,我试图显示来自customExceptionHandler类的Toast消息。但我无法做到这一点 我见过类似的问题,但仍然没有解决我的问题。这里有我遗漏的东西 我可以在Logcat中看到Log语句,但是toast没有出现 public class MyApplication extends Application { private Thread.UncaughtExceptionHandler defaultUEH; private Thread.UncaughtExcep

我试图显示来自customExceptionHandler类的Toast消息。但我无法做到这一点

我见过类似的问题,但仍然没有解决我的问题。这里有我遗漏的东西

我可以在Logcat中看到Log语句,但是toast没有出现

public class MyApplication extends Application {

    private Thread.UncaughtExceptionHandler defaultUEH;

    private Thread.UncaughtExceptionHandler unCaughtExceptionHandler =
            new Thread.UncaughtExceptionHandler() {
                @Override
                public void uncaughtException(Thread thread, final Throwable ex) {
                    Log.e("Inside Run", "******************** Inside uncaughtException ***************" + ex.getMessage());
                    Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_SHORT).show();
                }
            };

    public MyApplication() {
        defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(unCaughtExceptionHandler);
    }

}
我还尝试了一件事,我知道静态方法和变量不是最佳解决方案,但我在一个静态变量中的util类维护的activitiy上下文中创建了一个静态方法,并用它来显示一个toast,但它也不起作用


在uncaughtException()方法中

如果要在应用程序计算中显示Toast,则它必须具有显示Toast的上下文,以便可以在构造函数中传递上下文或获取活动实例

我没有尝试此代码,但您应该尝试此代码:

private static ApplicationContext instance;
/**
 * Your Constructor
 */
public MyApplication() {
    instance = this;
}

/**
 * Gets the application context.
 * @return the application context
 */
public static Context getContext() {
    if (instance == null) {
        instance = new ApplicationContext();
    }
    return instance;
}

       public static void showToast(String data) {
        Toast.makeText(getContext(), data,
                Toast.LENGTH_SHORT).show();
    }

Android清单文件,声明以下内容

 <application android:name="com.example.MyApplication">

    </application>
现在,everywhere调用MyApplication.getAppContext()静态获取应用程序上下文。

这对我来说很有用

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread paramThread, Throwable paramThrowable) {

            new Thread() {
                @Override
                public void run() {
                    Looper.prepare();
                    Toast.makeText(getActivity(),"Your message", Toast.LENGTH_LONG).show();
                    Looper.loop();
                }
            }.start();
            try
            {
                Thread.sleep(3000); // Let the Toast display before app will get shutdown
            }
            catch (InterruptedException e) {    }
            System.exit(2);
        }
    });

您是否在清单中添加了应用程序名称file@NileshRathod对我已经调试了代码,我可以看到控件已经到了那一行,但是toast没有显示upPlease请提及downvote的原因,这将有助于改进我没有downvote@NileshRathod不适用于u:)对于任何这样做的人,这是应用程序类,它将不包含runOnUiThread方法。让我更改构造函数并重试once@Raghavendra你确定你有例外吗?@Raghavendra我已经用我的方式检查了上面的代码,它会很好地工作。我在我的原始帖子中链接了一个问题,我已经在那里看到了这个答案,并且尝试过了。它在我的情况下不起作用。两个都不起作用。我怀疑每当抛出异常时,我认为应用程序会失去控制,因此无法显示任何Widget,这可能是因为这两种情况在我的应用程序中都起作用case@Raghavendra
public class MyApplication extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApplication.context;
    }
}
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread paramThread, Throwable paramThrowable) {

            new Thread() {
                @Override
                public void run() {
                    Looper.prepare();
                    Toast.makeText(getActivity(),"Your message", Toast.LENGTH_LONG).show();
                    Looper.loop();
                }
            }.start();
            try
            {
                Thread.sleep(3000); // Let the Toast display before app will get shutdown
            }
            catch (InterruptedException e) {    }
            System.exit(2);
        }
    });