首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示来自UncaughtExceptionHandler的Toast消息

显示来自UncaughtExceptionHandler的Toast消息
EN

Stack Overflow用户
提问于 2017-09-05 18:16:47
回答 3查看 358关注 0票数 1

我正在尝试显示来自一个类的Toast消息,它是一个customExceptionHandler。但我无法做到这一点。

我见过类似的问题,比如Displaying a Toast message from the Application class,但它仍然没有解决我的问题。我在这里遗漏了什么。

我可以在Logcat中看到Log语句,但没有显示toast

代码语言:javascript
复制
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类中创建了一个静态方法,在静态变量中维护活动上下文,并用它来展示一个同样不起作用的吐司

喜欢

代码语言:javascript
复制
Util.showToast(ex.getMessage()); 

在uncaughtException()方法中

EN

回答 3

Stack Overflow用户

发布于 2017-09-05 18:39:35

Android Manifest文件,声明以下内容。

代码语言:javascript
复制
 <application android:name="com.example.MyApplication">

    </application>

然后编写类:

代码语言:javascript
复制
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()来获取应用程序上下文。

票数 0
EN

Stack Overflow用户

发布于 2019-01-27 20:59:00

这对我来说很有效

代码语言:javascript
复制
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);
        }
    });
票数 0
EN

Stack Overflow用户

发布于 2017-09-05 18:22:42

如果您想在Application类中显示Toast,那么它必须有一个context来显示Toast,这样您就可以在构造函数或get activity实例中传递Context

我还没有尝试过这个代码,但是你应该试试这个:

代码语言:javascript
复制
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();
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46052515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档