首页 > 解决方案 > 片段中的“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;
    }

这是日志

在此处输入图像描述

标签: androidsqlite

解决方案


尝试像这样修改代码:

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。是时间问题。这就是为什么助手的创建应该延迟到上下文将出现的稍后阶段。


推荐阅读