В настоящее время я создаю приложение с нуля и не могу понять, как заставить мои представления автоматически обновляться при обновлении моей базы данных.БД реализована с использованием 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)