我对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()
为什么返回空引用?
答案 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应用程序的入口点。