如何在onResponse方法中创建一个对话框?

时间:2017-05-09 10:41:22

标签: java android retrofit2 okhttp3

这是我的对话框代码

public void registrationSuccess(final Context context, String warning, String message) {
        alert = new AlertDialog.Builder(context);
        alert.setTitle(warning);
        alert.setMessage(message)
                .setCancelable(false)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Intent i = new Intent(context, loginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        context.startActivity(i);
                    }
                });
        AlertDialog alertDialog = alert.create();
        alert.show();
    }

我希望在下面的onResponse方法中使用它

client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            System.out.println("Failure!!");
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            if(response.isSuccessful()) {
                registrationSuccess(getApplicationContext(), getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration));
            } else {
                System.out.println("FAILED");

            }
        }

    });

getApplicationContext打破了应用程序,并在控制台中显示以下错误

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference

我该如何替换context

注意:其非活动类

2 个答案:

答案 0 :(得分:3)

从活动类开始,在初始化类时,传递上下文:

new My_Non_ActivityClass(MainActivity.this);

现在在你的类中创建一个像这样的构造函数并获取上下文:

Context context;
My_Non_ActivityClass(Context c){
     context = c;
}

现在你有了上下文,可以像这样使用在任何地方:

public void registrationSuccess(context, String warning, String message) {
    alert = new AlertDialog.Builder(context);
    alert.setTitle(warning);
    alert.setMessage(message)
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    Intent i = new Intent(context, loginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    context.startActivity(i);
                }
            });
    AlertDialog alertDialog = alert.create();
    alert.show();
}

或者无需传递上下文,只需访问它,因为它是您班级中的全局变量。

注意:如果您正在服务,该服务有自己的上下文。只需使用this

答案 1 :(得分:0)

然后在Application类中为上下文创建getter setter方法 使用此功能可以获得整个应用程序的上下文

更改此行

registrationSuccess(null, getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration));

有了这个

registrationSuccess(ApplicationControler.getContext(), getResources().getString(R.string.congrats), getResources().getString(R.string.successfull_registration));