Статьи

ListView данных из базы данных SQLite — Android

Это учебник следующего уровня, где я смешиваю две концепции — концепцию ListView, которая подробно объясняется в учебнике ListView, и концепцию SQLiteDB в собственном учебнике.

Здесь я собираюсь сделать запрос к базе данных с помощью API SQLiteDatabase . Результаты, которые я получаю, находятся в объекте Cursor, который я повторяю и создаю ArrayList, который передается в ListView . Давайте посмотрим, какие шаги выполняются в этом упражнении:

В методе onCreate (…) у меня есть 2 метода, соответствующих двум шагам, описанным выше:

openAndQueryDatabase();

      displayResultList();

Давайте посмотрим, что делает каждый из них.

Вот первый шаг:

private void openAndQueryDatabase() {
            try {
                  DBHelper dbHelper = new DBHelper(this.getApplicationContext());
                  newDB = dbHelper.getWritableDatabase();
                  Cursor c = newDB.rawQuery("SELECT FirstName, Age FROM " +
                        tableName +
                        " where Age > 10 LIMIT 4", null);
            if (c != null ) {
                  if  (c.moveToFirst()) {
                        do {
                              String firstName = c.getString(c.getColumnIndex("FirstName"));
                              int age = c.getInt(c.getColumnIndex("Age"));
                              results.add("Name: " + firstName + ",Age: " + age);
                        }while (c.moveToNext());
                  }
            }                
            } catch (SQLiteException se ) {
            Log.e(getClass().getSimpleName(), "Could not create or Open the database");
        } finally {
            if (newDB != null)
                  newDB.execSQL("DELETE FROM " + tableName);
                  newDB.close();
        }
      } 

Теперь DBHelper — это класс, который я написал, расширяющий класс SQLiteOpenHelper . Все, что он делает, — это создает базу данных с именем «sample», создает в ней таблицу и вставляет значения в таблицу. Это происходит, если база данных еще не существует. Имя таблицы — «Ресурс», а столбцы в таблице: Фамилия, Имя, Страна, Возраст.

Код для этого примера можно скачать здесь, и вы также можете посмотреть код DBHelper (который я не хочу здесь развивать )

Итак, из класса DBHelper мы получаем открытую базу данных, которую мы называем newDB . Используя этот дескриптор, мы запрашиваем у таблицы значения. Для простоты, при получении значений я жестко закодировал имена столбцов, что не обязательно должно быть так. Поэтому я запускаю rawQuery и получаю результаты в Cursor .

Затем я перебираю Cursor и заполняю результаты в ArrayList of Strings « result ». В блоке finally я не только закрываю базу данных, но и перед этим удаляю все записи, вставленные в базу данных классом DBHelper просто для очистки ,

Далее, как мне отобразить результаты в ListView . Если вы знаете ListView — как это работает, это довольно просто. В противном случае вы можете посмотреть учебник ListView . Вот метод:

      private void displayResultList() {
            TextView tView = new TextView(this);
        tView.setText("This data is retrieved from the database and only 4 " +
                  "of the results are displayed");
        getListView().addHeaderView(tView);

        setListAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, results));
        getListView().setTextFilterEnabled(true);

      }

Единственный дополнительный бит, который я здесь сделал, — это добавление HeaderView (использующего концепцию пользовательского интерфейса программирования, описанную в другом учебнике ).

Я написал этот урок на основе некоторых запросов в моем блоге. Надеюсь это поможет.