База данных комнаты теряет данные - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над проектом Android с языком Kotlin и использую базу данных Room из компонентов архитектуры Android.Это все вещи из моей базы данных.Я пытаюсь позволить пользователю сохранять информацию о книге, и она отлично работает, пока я нахожусь в приложении, но при перезапуске приложения все было удалено.Мне нужно хранить данные в памяти, и поэтому я использую inMemoryDatabaseBuilder, но, похоже, это не работает.Любая помощь приветствуется.

Зависимости:

dependencies {
    def room_version = "1.1.1"
    implementation "android.arch.persistence.room:runtime:$room_version"
    kapt "android.arch.persistence.room:compiler:$room_version"
}

apply plugin: 'kotlin-kapt'

Объект:

@Entity(tableName = "tblBooks")
data class BookData(@PrimaryKey(autoGenerate = true) var id: Long?,
                    @ColumnInfo(name = "name") var name: String,
                    @ColumnInfo(name = "author") var author: String,
                    @ColumnInfo(name = "translator") var translator: String,
                    @ColumnInfo(name = "publisher") var publisher: String,
                    @ColumnInfo(name = "publication_year") var publicationYear: Int?,
                    @ColumnInfo(name = "price") var price: Int?,
                    @ColumnInfo(name = "description") var description: String,
                    @ColumnInfo(name = "category") var category: String,
                    @ColumnInfo(name = "shelf_number") var shelfNumber: Int?,
                    @ColumnInfo(name = "front_cover") var frontCover: String?,
                    @ColumnInfo(name = "back_cover") var backCover: String?
){
    constructor():this(null, "", "", "", "", 0, 0, "", "",
            0, "", "")
}

Дао:

@Dao
interface BookDataDao {

    @Query("SELECT * FROM tblBooks")
    fun getAll(): List<BookData>

    @Insert(onConflict = REPLACE)
    fun insert(bookData: BookData)


}

База данных:

@Database(entities = [BookData::class], version = 1)
abstract class BookDatabase: RoomDatabase(){

    abstract fun bookDataDao(): BookDataDao

    companion object {
        private var INSTANCE: BookDatabase? = null

        fun getInstance(context: Context): BookDatabase? {
            if (INSTANCE == null){
                synchronized(BookDatabase::class){
                    INSTANCE = 
                    Room.inMemoryDatabaseBuilder(context.applicationContext,
                            BookDatabase::class.java).build()
                }
            }
            return INSTANCE
        }
    }
}

Использование: вставка данных:

val database = BookDatabase.getInstance(this) !!
database.bookDataDao().insert(bookData)

получение данных:

val database = BookDatabase.getInstance(this) !!
val booksList = database.bookDataDao().getAll()

1 Ответ

0 голосов
/ 25 сентября 2018

Если вы храните только в памяти, ваша база данных не сохраняется между запусками приложения.В соответствии с документацией :

Информация, хранящаяся в базе данных в памяти, исчезает при завершении процесса

То есть каждый раз, когда вы убиваете приложение,База данных также закрыта.Если вы хотите, чтобы он был постоянным, вы должны вместо этого использовать стандартный databaseBuilder, он будет помещен в хранилище устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...