通过片段打开数据库时出现NullPointerException

时间:2013-07-23 18:44:22

标签: android database android-listfragment

我正在尝试从我的数据库中的一个列填充ListFragment。 为此,我正在尝试使用

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

        db.open();
        db = new NotesDatabase(getActivity());
        c = db.getAllRows();

    getActivity().startManagingCursor(c);

    String[] fromField = new String[] { NotesDatabase.KEY_TITLE };
    int[] toView = new int[] { R.id.item_title };
    SimpleCursorAdapter myCAdapter = new SimpleCursorAdapter(getActivity(),
            R.layout.list_item, c, fromField, toView, 0);
    setListAdapter(myCAdapter);
}

但我不知道为什么我在db.open()上得到NullPointerException;和c = db.getAllRows();

db.open()
    public NotesDatabase open() {
    db = myDBHelper.getWritableDatabase();
    return this;
    }

db.getAllRows();

    public Cursor getAllRows() {
    String where = null;
    Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null,
            null, null, null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
    }

DBHelper

    private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

或者是否有更好的方法来填充数据库中片段的列表视图? 在此先感谢:)

4 个答案:

答案 0 :(得分:1)

你不是在逆转吗?

db.open();
db = new NotesDatabase(getActivity());

答案 1 :(得分:1)

        db.open();
        db = new NotesDatabase(getActivity());
        c = db.getAllRows();
  1. 打开数据库
  2. 创建数据库
  3. 获取所有行。
  4. 从逻辑上讲。先创建它。然后打开。然后获取所有行。所以swithc第1行和孤独2。

    另一件事是,我假设你在myDBHelper上获得了NPE,因为你从未创建过那个帮助器。

答案 2 :(得分:0)

在打开数据库之前初始化它: db = new DatabaseHelper(this);

答案 3 :(得分:0)

你在新的之前做db.open所以它还不存在,你正试图打开一个空数据库。