我的问题是每当执行onCreateView()时,行db = dh.getWritableDatabase();
给我一个NullPointerException,我也看了this问题,但是我们有不同的情况。我的代码是否缺少某些内容?任何帮助将不胜感激。
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class FavMed extends Fragment {
public SQLiteDatabase db;
DatabaseHelper dh = new DatabaseHelper(this.getContext());
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fav_med, container, false);
try{
db = dh.getWritableDatabase();
}
catch(Exception e){
Log.d("log1",e.toString());
}
return rootView;
}
这是日志
答案 0 :(得分:2)
尝试像这样修改代码:
public SQLiteDatabase db;
DatabaseHelper dh = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fav_med, container, false);
try{
dh = new DatabaseHelper(this.getContext());
db = dh.getWritableDatabase();
}
catch(Exception e){
Log.d("log1",e.toString());
}
return rootView;
}
问题在于,当创建Fragment时,活动可能尚未准备好,因此上下文为null,因为指向片段所在的活动。是时间问题。这就是为什么应该将帮助程序的创建延迟到稍后出现上下文的阶段。
答案 1 :(得分:0)
实例化片段时上下文不可用。与@NiVeR相比,另一种可能的解决方案是:
public class FavMed extends Fragment {
public SQLiteDatabase db;
DatabaseHelper dh = null;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
dh = new DatabaseHelper(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fav_med, container, false);
try{
db = dh.getWritableDatabase();
}
catch(Exception e){
Log.d("log1",e.toString());
}
return rootView;
}