我正在尝试显示来自一个类的Toast消息,它是一个customExceptionHandler。但我无法做到这一点。
我见过类似的问题,比如Displaying a Toast message from the Application class,但它仍然没有解决我的问题。我在这里遗漏了什么。
我可以在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类中创建了一个静态方法,在静态变量中维护活动上下文,并用它来展示一个同样不起作用的吐司
喜欢
Util.showToast(ex.getMessage()); 在uncaughtException()方法中
发布于 2017-09-05 18:39:35
Android Manifest文件,声明以下内容。
<application android:name="com.example.MyApplication">
</application>然后编写类:
public class MyApplication extends Application {
private static Context context;
public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
}
public static Context getAppContext() {
return MyApplication.context;
}
}现在,无论在哪里,都可以静态地调用MyApplication.getAppContext()来获取应用程序上下文。
发布于 2019-01-27 20:59:00
这对我来说很有效
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);
}
});发布于 2017-09-05 18:22:42
如果您想在Application类中显示Toast,那么它必须有一个context来显示Toast,这样您就可以在构造函数或get activity实例中传递Context
我还没有尝试过这个代码,但是你应该试试这个:
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();
}https://stackoverflow.com/questions/46052515
复制相似问题