代码之家  ›  专栏  ›  技术社区  ›  Leace

android:从sqlite数据库填充gridtview

  •  2
  • Leace  · 技术社区  · 6 年前

    gridview在将数据保存到数据库中时,没有填充sqlite数据库中的任何数据。logcat也不会产生任何错误。

    我的数据库是。

    public Cursor getAllRows() {
      SQLiteDatabase db = this.getReadableDatabase();
      //String where = null;
      Cursor c = db.rawQuery("SELECT  * FROM " + DATAALL_TABLE, null);
      if (c != null) {
        c.moveToFirst();
      }
      return c;
    }
    

    主要活动。

    public void populateListView() {
    
      Cursor cursor = db.getAllRows();
      String[] fromFieldNames = new String[] {
        DBHelper.COURSES_KEY_FIELD_ID1, DBHelper.FIELD_MATERIALDESC, DBHelper.FIELD_MATERIALNUM
      };
      int[] toViewIDs = new int[] {
        R.id.textView1, R.id.textView3, R.id.textView2
      };
      SimpleCursorAdapter myCursorAdapter;
      myCursorAdapter = new SimpleCursorAdapter(getBaseContext(), android.R.layout.activity_list_item, cursor, fromFieldNames, toViewIDs, 0);
      GridView myList = (GridView) findViewById(R.id.gridView1);
      myList.setAdapter(myCursorAdapter);
    
    }
    

    致尊敬的会员@miket,建议其工作良好,但需要调整,

    正如

    enter image description here

    预期格式

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   MikeT    6 年前

    假设表中有数据,您的问题很可能是r.id.textview1….3与传递给SimpleCursorAdapter的布局无关。也就是说,您的问题可能与传递给SimpleCursorAdapter的布局和作为 身份证

    如果你要使用:

        gridview = this.findViewById(R.id.gridView1);
        csr = DBHelper.getAllRows();
        myCursorAdapter = new SimpleCursorAdapter(
                getBaseContext(),
                //android.R.layout.simple_list_item_2,
                android.R.layout.activity_list_item,
                csr,
                new String[]{
                        SO50674769DBHelper.COURSES_KEY_FIELD_ID1
                        //SO50674769DBHelper.FIELD_MATERIALDESC,
                        //SO50674769DBHelper.FIELD_MATERIALNUM
                },
                new int[]{android.R.id.text1}, //<<<< ID of the available view
                0
        );
        gridview.setAdapter(myCursorAdapter);
    

    那么结果将大致如下:

    enter image description here

    更改为使用不同的库存布局和2个字段,具体如下:

        gridview = this.findViewById(R.id.gridView1);
        csr = DBHelper.getAllRows();
        myCursorAdapter = new SimpleCursorAdapter(
                getBaseContext(),
                android.R.layout.simple_list_item_2,
                //android.R.layout.activity_list_item, //<<<< Changed Layout
                csr,
                new String[]{
                        SO50674769DBHelper.COURSES_KEY_FIELD_ID1,
                        SO50674769DBHelper.FIELD_MATERIALDESC,
                        //SO50674769DBHelper.FIELD_MATERIALNUM
                },
                new int[]{android.R.id.text1, android.R.id.text2}, //<<<< ID's of the 2 views
                0
        );
        gridview.setAdapter(myCursorAdapter);
    
    • 注意databasehelper类的命名是为了方便起见。

    会导致:

    enter image description here

    因此我怀疑你需要把布局改成你自己的。

    另外,正如你所暗示的 getAllRows 方法一点也不理想。

    • 检查空游标是无用的,因为从rawquery返回的游标不会为空。它可能是空的,在这种情况下,光标 getCount 方法将返回0()。
    • 搬家也是浪费。

    简单地说:

    public Cursor getAllRows() {
      SQLiteDatabase db = this.getReadableDatabase();
      return db.rawQuery("SELECT  * FROM " + DATAALL_TABLE, null);
    }