SQLite游标出错

Top*_*Cat 0 sqlite android cursor

我试图从sqlite中的表中获取所有项目,并需要在列表视图中显示它.

这是我获取物品的代码

public List<MenuData> getMenuItem(){
    SQLiteDatabase db;
    Cursor cursor=null;
    List<MenuData> menuList = new ArrayList<MenuData>();
    db=getReadableDatabase();
    String query ="SELECT * from "+TABLE_NAME_MENU;
    try{
    cursor = db.rawQuery (query, null );
    }
    catch (NullPointerException e){
        Log.e("Error","Null Pointer Exception");
    }

   if ( cursor.moveToFirst()) {
        do {
            MenuData menuData= new MenuData();
            menuData.setKEY_ITEM_NAME(cursor.getString(cursor.getColumnIndex(KEY_ITEM_NAME)));
           menuData.setKEY_ITEM_CATEGORY(cursor.getString(cursor.getColumnIndex(KEY_ITEM_CATEGORY)));
            menuData.setKEY_ITEM_CONTENTS(cursor.getString(cursor.getColumnIndex(KEY_ITEM_CONTENTS)));
            menuData.setKEY_ITEM_TYPE(cursor.getString(cursor.getColumnIndex(KEY_ITEM_TYPE)));
            menuData.setKEY_PRICE(cursor.getString(cursor.getColumnIndex(KEY_PRICE)));
            menuList.add(menuData);
        } while (cursor.moveToNext());
    }
   return menuList;

}
Run Code Online (Sandbox Code Playgroud)

我的问题是我得到了表格最后一行的结果menuList,它在表格中有相同的行数.因此列表视图具有所有相同的项目.

laa*_*lto 6

移动循环MenuData menuData= new MenuData()内部,do-while以便创建新对象,而不是一遍又一遍地更新同一对象.

另外,改变

if (cursor!=null) {
    cursor.moveToFirst();
Run Code Online (Sandbox Code Playgroud)

if (cursor.moveToFirst()) {
Run Code Online (Sandbox Code Playgroud)

因此,如果没有结果行,您的代码不会崩溃.检查cursor != null没有必要.