如何允许非活动显示活动对话框?

时间:2018-03-02 17:05:23

标签: java android alert ui-thread

这个问题与过去提出的问题非常相似,但请耐心等待,因为它仍然是一个独特的问题。基本上,我有一个获得应用程序权限的类,如果用户没有运行Internet,那么当自动登录屏幕出现时,它就会陷入加载状态。所以我想要做的是显示一条对话框消息,用户将单击确定关闭应用程序。对于对话框,我需要上下文,我必须在主线程上运行。我发布了代码图片,因为我想告诉你runOnUIThread是红色的。这是我从Android Studio

获得的错误
  

无法解析方法runOnUIThread。

这就是我所拥有的

enter image description here

问题:由于某种原因,runOnUIThread不可用。有没有人有反建议,或者我为什么遇到这个问题?

以下是代码:

public void alert() {

    new Thread()
    {
        public void run()
        {
            application.runOnUiThread(new Runnable()  // application is the context of my current activity.
            {
                public void run() //I display my alert Dialog here.
                {
                    AlertDialog build= new AlertDialog.Builder(application.getApplicationContext())
                            .setTitle("Error")
                            .setMessage("Sorry there seems to be a problem with the service. Please check to make sure you have a stable internet connection. ")
                            .setPositiveButton("Ok, I understand.", (dialog, which) -> System.exit(0))
                            .show();
                    build.setCancelable(false);
                    Button positive= build.getButton(DialogInterface.BUTTON_POSITIVE);
                    positive.setTextColor(application.getResources().getColor(R.color.buttonPrimaryColor));
                    positive.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
                }
            });
        }
    }.start();

以下是我过去使用Toast的方法。

public void shortToast(String msg) {
    Observable.just(msg)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(message -> {
                Toast.makeText(application, message, Toast.LENGTH_SHORT).show();
            });
}

// In the main method 

shortToast("Sorry an error occured");

2 个答案:

答案 0 :(得分:2)

  

由于某种原因,runOnUIThread不可用

您尝试调用的方法是runOnUiThread()。这是Activity上的方法。无论application是什么,它都不是Activity

  

有没有人提出反建议

将此代码移至Activity。通常,弹出窗口(对话框,零食栏等)应由Activity显示。只有Activity可以显示Dialog,例如AlertDialog

答案 1 :(得分:0)

尝试使用活动在UI上运行,而不是在应用程序

上运行