Как вывести данные из базы данных в listview

538
09 июня 2017, 09:46

Имеется база данных и активити с компонентом listview как из готовой базы вывести в listview элементы из таблицы? Базу подключаю вот так

public class ExternalDbOpenHelper extends SQLiteOpenHelper
{
    private static final String DATABASE_NAME = "Busstops.sqlite"; // Название файла с БД
    private static final int DATABASE_VERSION = 1;            //Версия БД
    private static final String SP_KEY_DB_VER = "db_ver";
    private final Context mContext;
    public ExternalDbOpenHelper(Context context, String DB_NAME) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        mContext = context;
        initialize();
    }
    /**
     * Инициализация БД. Создание новой если ранее не существовала.
     */
    private void initialize() {
        if (databaseExists()) {
            SharedPreferences prefs = PreferenceManager
                    .getDefaultSharedPreferences(mContext);
            int dbVersion = prefs.getInt(SP_KEY_DB_VER, 1);
            if (DATABASE_VERSION != dbVersion) {
                File dbFile = mContext.getDatabasePath(DATABASE_NAME);
                if (!dbFile.delete()) {
                    // Log.w(TAG, "Невозможно обновить БД");
                }
            }
        }
        if (!databaseExists()) {
            createDatabase();
        }
    }
    /**
     * Проверка существования файла БД. Если существует - возвращает true.
     * @return
     */
    private boolean databaseExists() {
        File dbFile = mContext.getDatabasePath(DATABASE_NAME);
        return dbFile.exists();
    }
    /**
     * Создание БД, копирование файла из Assets.
     */
    private void createDatabase() {
        String parentPath = mContext.getDatabasePath(DATABASE_NAME).getParent();
        String path = mContext.getDatabasePath(DATABASE_NAME).getPath();
        File file = new File(parentPath);
        if (!file.exists()) {
            if (!file.mkdir()) {
                //  Log.w(TAG, "Невозможно создать папку БД");
                return;
            }
        }
        InputStream is = null;
        OutputStream os = null;
        try {
            is = mContext.getAssets().open(DATABASE_NAME);
            os = new FileOutputStream(path);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer)) > 0) {
                os.write(buffer, 0, length);
            }
            os.flush();
            SharedPreferences prefs = PreferenceManager
                    .getDefaultSharedPreferences(mContext);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt(SP_KEY_DB_VER, DATABASE_VERSION);
            editor.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,
                          int newVersion) {
    }
}

и вот код активности

ListView lv1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actstop1);
        lv1 = (ListView) findViewById(R.id.lv1);
Answer 1

Алгоритм такой:

  1. Создаете адаптер для ListView на основе CursorAdapter. Используете уже готовый SimpleCursorAdapter, если его функциональность вас устраивает или пишите собственный кастомный адаптер-наследник CursorAdapter.
  2. Делаете класс-хелпер на основе класса SQLiteOpenHelper включающий GRUD-операции с вашей базой данных (добавление, удаление, обновление и запросы (чтение) в БД.
  3. Получаете выборку (Cursor) из БД через GRUD-операции созданного в п.2 класса (метод guery())
  4. Cозданный в п.1 адаптер подключаете к списку ListView и передаете полученный курсор.

Для взаимодействия между адаптером и БД настоятельно рекомендуется использовать класс CursorLoader

Пример реализации списка ListView с заполнением из базы SQLite

READ ALSO
Java API для работы с битриксом

Java API для работы с битриксом

Существуют ли какие-нибудь API для работы с битриксом из Java?

327
Как заставить Spring искать html не в ресурсах?

Как заставить Spring искать html не в ресурсах?

Добрый день, дорогие друзьяРаботаю со Spring 4 и встал вопрос: до этого все вьюхи помещал в папку resources, но прочитал, что можно поменять путь и размещать...

301
Получить значение сканера cipherlab rs30? [дубликат]

Получить значение сканера cipherlab rs30? [дубликат]

На данный вопрос уже ответили:

261