Android 在 类 中使用的上下文不同于 Activity

Android Context used in classes other than Activity

在我的主要活动中:

 LoginUser.loginUser(username.getText().toString(),password.getText().toString(), getApplication());

所以在我的 LoginUser class 中, 我想启动一个这样的对话框:

new AlertDialog.Builder(context).set.....

但是失败了, 像这样获取故障信息:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

我也想用like

Intent intent = new Intent(context, ABC.class)
context.startActivity(intent);

同样失败。并像这样获取故障信息:

android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

我对所有这些感到很困惑,有人可以帮助我吗?非常感谢!

我不完全确定你在做什么,但对于第一个问题,你似乎在尝试使用非 activity 上下文来显示对话框。

TL;DR,您不能使用具有应用程序上下文的 AlertDialog,它需要 Activity。 考虑这样的事情:

new AlertDialog.Builder(<activity>)

第二个问题也类似,可以用application context来启动一个activity,但是需要作为一个新任务来启动。为此,您需要添加一个标志。 (虽然,这不被认为是好的做法)

Intent intent = new Intent(context, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

查看 here 以了解更多关于在 Android 中可以和不能使用各种类型的上下文的信息。

试试这个。

LoginUser.loginUser(username.getText().toString(),password.getText().toString(),  Mainactivity.this);

将 getApplicationcontext() 替换为您的 Activity。

new AlertDialog.Builder(<activity>)

你也可以用这个

LoginUser.loginUser(username.getText().toString(),password.getText().toString(), this);

LoginUser.java

public void loginUser(Context context){
}