为啥我得到 getApplicationcontext() null?

Posted

技术标签:

【中文标题】为啥我得到 getApplicationcontext() null?【英文标题】:Why am I getting getApplicationcontext() null?为什么我得到 getApplicationcontext() null? 【发布时间】:2015-12-13 21:21:38 【问题描述】:

我不确定它有什么问题!我读到here,Intentservice 本身就是Context 的子类。

public class GCMNotificationIntentService extends IntentService 
    private NotificationManager mNotificationManager;
    NotificationCompat.Builder builder;
    Context mainContext;
    WriteFile writeFile;

    public GCMNotificationIntentService() 
        super("GcmIntentService");
        mainContext = getApplicationContext();
        writeFile = new WriteFile(mainContext);
    
    // My rest of the code

但我得到了 mainContext 的空值。 欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

在构造函数中访问应用上下文还为时过早。尝试将此代码移动到onCreate 方法中。

关于生命周期的更多数据可以在the documentation找到

【讨论】:

【参考方案2】:

您应该在 onCreate 方法中调用 this,而不是在构造函数中。在构造函数中,还没有设置应用上下文,所以会为null。

【讨论】:

【参考方案3】:

为了更好地获取应用上下文,你应该按照以下方式使用。

使用以下方式

第 1 步

创建一个应用程序类

public class MyApplication extends Application

    private static Context context;

    public void onCreate()
        super.onCreate();
        MyApplication.context = getApplicationContext();
    

    public static Context getAppContext() 
        return MyApplication.context;
    

第 2 步

android Manifest 文件中声明如下

<application android:name="com.xyz.MyApplication">
   ...
</application>

第 3 步

使用以下方法在应用程序的任何位置调用应用程序上下文。

MyApplication.getAppContext();

喜欢,

public class GCMNotificationIntentService extends IntentService 
    private NotificationManager mNotificationManager;
    NotificationCompat.Builder builder;
    Context mainContext;
    WriteFile writeFile;

    public GCMNotificationIntentService() 
        super("GcmIntentService");
        mainContext = MyApplication.getAppContext();
        writeFile = new WriteFile(mainContext);
    
    // My rest of the code

【讨论】:

【参考方案4】:

使用GCMNotificationIntentService.this 或简单地使用this 而不是mainContext

IntentService 扩展了Service,它本身就是Context 的子类

【讨论】:

以上是关于为啥我得到 getApplicationcontext() null?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到一个零数组

为啥我得到一个 nullPointerException? [复制]

为啥我没有得到任何回应

为啥我得到黑色纹理?

为啥我得到分段(核心转储)?

为啥我得到 getApplicationcontext() null?