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){
}
在我的主要活动中:
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){
}