AlertDialog 不会显示

AlertDialog won't show

我试图在我的代码中显示一个警告对话框。 它在构建时需要一个 Context 作为参数。 我希望它在我的 LoginActivity:

中弹出
    public class LoginActivity extends ActionBarActivity
    { 
            // Methods inside         
    }

但是我生成 alertDialog 的函数在单独的 class 中。因此,为了获得合适的 Context,我尝试了一个额外的 class,它给了我 ApplicationContext,然后我将其用作必需的参数。

这是我生成 alertDialog:

的函数
    public static void alertFailure(String errorTitle, String errorMessage){
            Log.d("Alert Failure", "alerting failure");
            AlertDialog.Builder builder = new AlertDialog.Builder(MyApplication.getAppContext()); // Needs context of loginactivity
            builder.setTitle(errorTitle);
            builder.setMessage(errorMessage);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which){

                }
            });
            AlertDialog alertDialog = builder.create();
            alertDialog.show();
    }

这是我的 class,我用它来获取 ApplicationContext:

    public class MyApplication extends Application{
        private static Context context;

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

        public static Context getAppContext(){
            return context;
        }
    }

当我登录我的程序时,我可以看到我的功能 运行 正常,但是 alertDialog 没有弹出。如何将 LoginActivityContext 作为参数传递?

尝试替换这个..

AlertDialog alertDialog = builder.create();
        alertDialog.show();

有了这个..

builder.show();

在 alertFailure() 中添加另一个参数作为 ActivityContext,然后从 LoginActivity class.

调用 alertFailure("Alert Failure", "alerting failure", LoginActivity.this);

你可以重载方法

public static void alertFailure(Context context, String errorTitle, String errorMessage) {
 Log.d("Alert Failure", "alerting failure");
        AlertDialog.Builder builder = new AlertDialog.Builder(context); // Needs context of loginactivity
        builder.setTitle(errorTitle);
        builder.setMessage(errorMessage);
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){

            }
        });
        AlertDialog alertDialog = builder.create();
        alertDialog.show();
}

并称其为 NomeClass.alertFailure(LoginActivity.this, "title", "message");

并且您可以保留没有上下文的版本:

public static void alertFailure(String errorTitle, String errorMessage){
      alertFailure(MyApplication.getContext(), erroTitle, errorMessage);
 }

您需要 activity 对话上下文。应用程序上下文不会。

您可以将其作为参数传递给方法,例如

public static void alertFailure(Activity context, String errorTitle, String errorMessage){

并从 activity 呼叫:

AnotherClass.alertFailure(this, ...);

我认为 Context 没有问题。

像这样调用alertFailure

new Handler().post(new Runnable() {
    @Override
    public void run() {
        alertFailure("Title", "Message");
    }
});