Android:从SQLite数据库填充GridtView

时间:2018-06-04 06:47:48

标签: sqlite gridview

在将数据保存到数据库时,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;
}

Mainactivity。

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 个答案:

答案 0 :(得分:2)

您的问题,假设表中有数据,可能是R.id.textView1 .... 3与传递给SimpleCursorAdapter的布局无关。即您的问题可能与传递给SimpleCursorAdapter的布局和作为 ID传递的视图的ID的组合有关。

如果您要使用: -

    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方法暗示并不理想。

  • 检查null游标是没用的,因为从rawQuery返回的Cursor不会为null。它可能为空,在这种情况下,Cursor getCount方法将返回0()。
  • moveToFirst也是一种浪费。

只需: -

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