简体   繁体   中英

How to allow a non-activity to display dialog on activity?

This question is very similar to questions that have been asked in the past but please bear with me as it is still a unique question. Basically, I have a class that gets application permissions, and if the user does not have internet running, then when the auto login screen comes, it is stuck in loading. So what I want to do is show a dialog message, and the user will click ok to close the app. For dialogs, I need the context, and I must run on the main thread. I have posted an image of the code because I want to show you that runOnUIThread is red. Here is the error I get form Android Studio

Cannot resolve method runOnUIThread.

Here is what I had

在此处输入图片说明

Problem: For some reason, runOnUIThread is not usable. Does anyone have a counter proposal, or a reason as to why I am having this problem?

Here is the code:

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();

Here is how I have made it work with a Toast in the past.

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");

For some reason, runOnUIThread is not usable

The method that you are trying to invoke is runOnUiThread() . That is a method on Activity . Whatever application is, it is not an Activity .

Does anyone have a counter proposal

Move this code into an Activity . Generally, pop-ups (dialogs, snackbars, etc.) should be displayed by an Activity . And only an Activity can show a Dialog , such as an AlertDialog .

尝试使用活动在UI而非应用程序上运行

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM