Хранение данных#
Реляционные данные#
Для хранения реляционных данных используется СУБД SQLite и ORM Room.
Для подключения базы данных необходимо:
Подключить зависимости в Gradle.
Создать класс базы данных.
Зарегистрировать базу данных в
MainActivity.
В случае, еслиMainActivityунаследована отGsBaseActivity, добавьте в класс:override fun provideDatabase(): PrototypeDatabase = RoomDbSingleton.getInstance(this, "PrototypeDatabase")
Класс базы данных#
// db/AppDatabase.kt
@Database(
entities = [SystemEntity::class, User::class],
version = 1,
exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
abstract val userDao: UserDao
companion object {
@Volatile private var INSTANCE: AppDatabase? = null
fun getInstance(ctx: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: Room.databaseBuilder(
ctx,
AppDatabase::class.java,
"AppDB"
).build().also { INSTANCE = it }
}
}
}
Файлы#
Файлы сохраняются в каталоге приложения согласно настройке DbConfig.dataPath.
Для работы с файлами используется FileManager в GsSession.
Он позволяет организовать транзакционную работу с файлами.
Принципы работы:
любые загруженные/созданные файлы сначала пишутся во временную область;
при
commit()— перемещаются в постоянную область;при
rollback()— удаляются.
Таким образом БД и файлы остаются синхронными.
Работа с файлами#
val localPath = takePhoto() // /cache/…
val draft = dbs.fileManager.copyToSendDir(localPath)
gate.upload(draft) // сервер принял → HTTP 200
dbs.commit() // файл переносится в /data/
Если сеть упала — вызов rollback() удалит файл из черновиков и откатит БД.