android - 使用 getApplicationContext 将上下文传递给标准 java 类会导致 Force Close

标签 android applicationcontext android-context

我正在开发一个 Android 应用程序,目前在将上下文从 ListFragment 传递到标准 Java 类时遇到问题。

我有一个名为 Common 的类,在构造函数中我传递了上下文,这样我就可以执行各种常见任务,例如显示警告对话框,这样我就可以继续重用代码,而不必每次都写出代码对于我需要的每个警报对话框。在我正在使用的标准 Activity 中初始化类(class)。

Common common = new Common(this);

如果这是在扩展 Activity 的类中完成的,则上面的代码可以正常工作。但是,如果我想做同样的事情,但在扩展 ListFragment 的类中,这是行不通的,所以我使用以下代码来初始化类

Common common = new Common(getActivity().getApplicationContext());

当上面的代码在 ListFragment 中执行时,当一个函数用于显示是/否警报对话框时,我得到一个异常的强制关闭

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

下面是类的构造函数

public Common(Context context)
{
    this.context = context;
}

重申一下,如果 Common 类是从使用 this 传递给构造函数的参数。只有当我将 getActivity().getApplicationContext() 作为参数传递给构造函数时,我才会收到此错误。

作为测试,我还更改了一个扩展 Activity 的类,并使用 getApplicationContext 而不是使用它,我得到了同样的错误,所以它不一定特定于我使用 ListFragment。

感谢您提供的任何帮助。

最佳答案

您不能在您的情况下使用 ApplicationContext。而是只使用 getActivity()。 Activity 是一个 Context,因此您的 Common 类构造函数将得到满足。

但是您的 Common 类实际上应该有 Common(Activity a) 构造函数。

关于android - 使用 getApplicationContext 将上下文传递给标准 java 类会导致 Force Close,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12590661/

相关文章:

spring - 为什么 Spring 4.0.9 applicationContext 初始化会卡住,而 3.2.1 不会?

flutter - 如何在 flutter 中无上下文导航?

java - 在 fragment 中使用上下文

android - 自定义语音识别对话框

java - 在 Android 上 react native RTL

java - 有没有办法为Spring生成applicationContext.xml?

java - Maven surefire 测试重用 fork 与 parallel

java - 如何将上下文传递给静态方法?

android - SLF4J和Gradle-看不到任何日志

android - 导致 TTS 初始化失败的原因是什么?