空对象引用上的Android getApplicationContext()

时间:2019-04-06 03:17:51

标签: android android-context

我对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()为什么返回空引用?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

仅尝试getActivity()

代替getActivity().getApplicationContext()

答案 2 :(得分:0)

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

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

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

MyApplication myApplication = new MyApplication();

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