android - 片段中的“getWritableDatabase”发生 NullPointerException
问题描述
我的问题是每当执行 onCreateView() 时,该行都db = dh.getWritableDatabase();
会给我一个 NullPointerException,我也看过 这个问题,但我们有不同的情况。我的代码缺少什么吗?任何帮助,将不胜感激。
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;
}
这是日志
解决方案
尝试像这样修改代码:
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时,可能activity还没有准备好,所以context为null,因为指的是fragment所在的activity。是时间问题。这就是为什么助手的创建应该延迟到上下文将出现的稍后阶段。
推荐阅读
- java - 字符串之间的时间差异
- window-functions - 如何解决 MySQL8 在 MySQL 5.7 上运行代码的问题?
- python - SQLAlchemy 执行查询但不更新,尽管原始查询在 SQL IDE 中工作正常
- python - 在 PyCharm 中更改默认 Python / Flask 控制台
- flutter - 超级构造函数在flutter_bloc中是如何工作的
- react-native - 使用 React Navigation 设置带有安全区域插入的标题高度
- ubuntu - 如何在 VM 中下载 Kafka
- python - 如何在 Tensorboard 中绘制不是直方图的多纪元 xy 线图?
- reactjs - TypeError:无法读取未定义的属性“ReactCurrentDispatcher”
- reactjs - 向下滚动到 React Native ScrollView 中的特定视图