Android getApplicationContext()在null对象引用上

问题描述 投票:-2回答:3

我对Android开发和上下文的想法很新。因此,如果看起来我显然做错了,请解释我应该做的事情。

我正在尝试将我的应用程序上下文传递给构造函数(以便我可以访问该对象中的数据库表)但我仍然遇到以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext on a null object reference

这是我的代码片段:

public class FragmentShoppingList extends Fragment{

    MyApplication myApplication = new MyApplication();

    public FragmentShoppingList() {

    }

    SQLiteShoppingCartService sqLiteShoppingCartService = new SQLiteShoppingCartService(getActivity().getApplicationContext());
}

为什么getActivity()返回空引用?

android android-context
3个回答
0
投票

片段可以独立于它所托管的activity而存在。请参阅fragment lifecycle。创建片段实例时,代码会初始化您的sqLiteShoppingCartService。创建实例时,片段不是任何活动的一部分。它后来附加到活动。使用onActivityCreated生命周期方法初始化您的sqLiteShoppingCartService


0
投票

在Android Fragment的生命周期中有一个名为onAttach(Context context)的方法

SQLiteShoppingCartService sqLiteShoppingCartService = new SQLiteShoppingCartService(getActivity().getApplicationContext());

在创建FragmentShoppingList的对象时调用上面的这一行。只有当片段附加到窗口并且在onAttach(Context context)方法上发生时,才会在这种情况下将Fragment赋予片段FragmentShoppingList的对象。

MyApplication myApplication = new MyApplication();

我相信MyApplication从Application扩展,如果是这样,就不要像这样创建。一旦您在Android.Manifest文件中引用它,它就是每个Android应用程序的入口点。


0
投票

尝试使用getActivity()

而不是getActivity().getApplicationContext()

© www.soinside.com 2019 - 2024. All rights reserved.