【问题标题】:Null Pointer When Extending Android's Application扩展 Android 应用程序时的空指针
【发布时间】:2011-12-23 01:30:27
【问题描述】:

我一直在尝试扩展 Application 作为获取 Application Context 对象的快速方法。我有这样的课:

public class PageMonitorApplication extends Application
{
    @Override
    public Context getApplicationContext()
    {
        return super.getApplicationContext();
    }
}

我的清单包括:

<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".PageMonitorApplication">

但是,当创建PageMonitorActivity 的实例并调用getApplicationContext() 时,我得到一个空指针异常。在 Eclipse 中调试并检查 PageMonitorActivity 的实例时,我可以看到 base=null

谁能告诉我哪里出了问题?

【问题讨论】:

    标签: android nullpointerexception android-context applicationcontext


    【解决方案1】:

    super.getApplicationContext() 正在返回null,因为PageMonitorApplication 应用程序上下文。您应该检查getApplicationContext 是否返回null,如果是,请使用您已有的Context

    要获得对PageMonitorApplication 的引用,请在当前ActivityService(或您可能拥有的其他Context)上调用getApplicationContext

    【讨论】:

    • 我没有得到这个......所以在 getApplicationContext() 我可以只返回 this?
    • 不,重点是PageMonitorApplication应用上下文。你根本不需要那种方法。
    • 但是如果我在 PageMonitorApplication 的实例上调用 Context 方法,我会得到一个空指针。例如。上下文上下文 = new PageMonitorApplication(); context.getDatabasePath("my_db");导致一个空指针。
    • 当你说“PageMonitorApplication 的一个实例”时,你的意思是在你的应用程序的某个地方,你明确地创建了它的一个实例 (new PageMonitorApplication())?你应该永远不要那样做。您应该始终在当前的 ActivityService 上调用 getApplicationContext 以获取对它的引用。自己创建不会正确初始化。
    • 那么,在这种情况下,我搞错了。我想要一种从应用程序中的任何位置获取 ApplicationContext 的方法,而无需将 Context 作为参数传递。因此,PageMonitorApplication 旨在成为一种实现方式 - 创建它的一个实例,您可以从中获取所需的 Context。但是我仍然需要一个 Context 来获取 PageMonitorApplication 那样我也好不到哪里去。
    【解决方案2】:

    在任何活动中,您可以使用 getApplicationContext() 直接访问 AppllicationContext 对象。无需使用 Application 类创建和试验。

    【讨论】:

    • 我想让在 Activity 外部访问 ApplicationContext 变得容易。
    • 您想对 Activity 之外的 ApplicationContext 做什么?
    • @JosephusVillarey 即使他需要在外面,他也可以发送 getApplicationContext() 作为参数,并在任何他想要的地方接收它作为上下文参数。不是吗?
    • 我正在尝试在不传递 Context 参数的情况下获取 applicationcontext 的方法。
    • @JosephusVillarey 这确实是理论上的,但是如果我想在应用程序文件存储区域中放置一些东西,我需要一个上下文,而这个活动不需要在一个 Activity 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2012-10-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多