在Activity以外的类中使用的Android Context

时间:2016-07-30 03:52:37

标签: android android-intent android-activity alertdialog android-context

在我的主要活动中:

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

所以在我的LoginUser类中, 我想开始这样一个对话框:

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

但失败了, 得到这样的错误信息:

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

我也想使用

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?

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

3 个答案:

答案 0 :(得分:1)

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

TL; DR,你不能使用具有应用程序上下文的AlertDialog,它需要一个Activity。 考虑类似的事情:

new AlertDialog.Builder(<activity>)

第二个问题也类似,您可以使用应用程序上下文启动活动,但需要将其作为新任务启动。为此,您需要添加一个标志。 (虽然这不被认为是一种好的做法)

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

检查here,了解有关Android中各种类型的上下文可以做什么和不能做什么的更多信息。

答案 1 :(得分:0)

试试这个。

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

将getApllicationcontext()替换为您的Activity。

new AlertDialog.Builder(<activity>)

答案 2 :(得分:0)

你也可以使用它

public void loginUser(Context context){
}

LoginUser.java

{{1}}