这是我的对话框代码
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
?
注意:其非活动类
答案 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));