0

我正在尝试从我的数据库中的列之一填充 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;
    }

数据库助手

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

或者是否有更好的方法从数据库中填充片段的列表视图?提前致谢 :)

4

4 回答 4

1

你不是在做相反的事情吗?

db.open();
db = new NotesDatabase(getActivity());
于 2013-07-23T18:46:42.563 回答
1
        db.open();
        db = new NotesDatabase(getActivity());
        c = db.getAllRows();
  1. 打开数据库
  2. 创建数据库
  3. 获取所有行。

从逻辑上讲。首先创建它。然后打开。然后获取所有行。所以切换第 1 行和第 2 行。

另一件事是,我假设您在 myDBHelper 获得 NPE,因为您从未创建过该帮助程序。

于 2013-07-23T18:48:16.583 回答
0

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

于 2013-07-23T18:47:00.047 回答
0

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

于 2013-07-23T18:51:47.363 回答