Наблюдение за изменениями в базе данных anko - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я создаю приложение с нуля и не могу понять, как заставить мои представления автоматически обновляться при обновлении моей базы данных.БД реализована с использованием sqlite от Anko.Ради краткости я многое упустил, но в репозитории есть больше методов управления, таких как вставка и удаление, которые работают.

Я создаю экземпляры arrayAdapters в своих действиях на основе списка, возвращаемого этим репозиторием., но в настоящее время только в методе onCreate().

filesystemList = FilesystemRepository(this).getAllFilesystems()

Вместо того, чтобы пытаться управлять сознанием жизненного цикла вручную, я бы хотел использовать что-то вроде LiveData, чтобы сделать мою жизнь проще.

Может кто-нибудь объяснитьмне, как правильно сделать это, или указать мне на пример?

Вот пример модели:

data class Filesystem(val name: String,
                      val realRoot: Boolean,
                      val location: String,
                      val type: String,
                      val dateCreated: String) {
    companion object {
        val TABLE_NAME = "Filesystem"
        val COLUMN_FILESYSTEM_ID = "filesystemId"
        val COLUMN_NAME = "name"
        val COLUMN_REAL_ROOT  = "realRoot"
        val COLUMN_LOCATION = "location"
        val COLUMN_TYPE = "type"
        val COLUMN_DATE_CREATED = "dateCreated"
    }
}

Хранилище, в которое я обернул его:

class FilesystemRepository(val context: Context) {
    fun getAllFilesystems(): ArrayList<Filesystem> {
        return ArrayList(context.database.use {
            select(Filesystem.TABLE_NAME).exec {
                parseList(parser)
            }
        })
    }
}

И сама база данных:

    class DatabaseOpenHelper(context: Context): ManagedSQLiteOpenHelper(context, "AppDatabase") {
    companion object {
        private var instance: DatabaseOpenHelper? = null

        @Synchronized
        fun getInstance(context: Context): DatabaseOpenHelper {
            if(instance == null) {
                instance = DatabaseOpenHelper(context.applicationContext)
            }
            return instance!!
        }
    }

    override fun onCreate(database: SQLiteDatabase) {
        database.createTable(Filesystem.TABLE_NAME, true,
                Filesystem.COLUMN_FILESYSTEM_ID to INTEGER + PRIMARY_KEY + AUTOINCREMENT,
                Filesystem.COLUMN_NAME to TEXT + UNIQUE(ConflictClause.FAIL),
                Filesystem.COLUMN_REAL_ROOT to INTEGER,
                Filesystem.COLUMN_LOCATION to TEXT,
                Filesystem.COLUMN_TYPE to TEXT,
                Filesystem.COLUMN_DATE_CREATED to TEXT
        )
}


val Context.database: DatabaseOpenHelper
    get() = DatabaseOpenHelper.getInstance(applicationContext)
...