Android: заполнение GridtView из базы данных SQLite - PullRequest
0 голосов
/ 04 июня 2018

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;
}

Mainacctivity.

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 голосов
/ 04 июня 2018

Ваша проблема, если предположить, что в таблице есть данные, вероятно, 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, не будет нулевым.Может быть пустым, и в этом случае метод Cursor getCount вернет 0 ().
  • moveToFirst также является пустой тратой.

Просто иметь: -

public Cursor getAllRows() {
  SQLiteDatabase db = this.getReadableDatabase();
  return db.rawQuery("SELECT  * FROM " + DATAALL_TABLE, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...