Как проверить, вставлены ли данные в базу данных комнаты

Я использую Database Room из новых компонентов архитектуры в своем проекте. Я добавляю некоторые данные через dao, но при попытке получить его я не получаю. Можете ли вы предложить мне, как проверить, была ли вставка успешной или нет? Ниже приведены коды, которые помогут вам понять проблему.

добавив в базу данных, я проверил с помощью отладчика, этот оператор успешно выполнен.

appContext.db.rallyDAO().addVehicleListItem(vehicle) 

Получение null из базы данных в этом заявлении после вставки.

 val v = appContext.db.rallyDAO().getVehicleListItem(it.vehicleID) 

RoomDatabase

 @Database(entities = arrayOf(Rally::class, Route::class, CheckPoints::class, Vehicles::class, VehicleListItem::class), version = 1) abstract class TSDRoom: RoomDatabase() { public abstract fun rallyDAO():RallyDAO } 

Внутри DAO

 @Insert(onConflict = OnConflictStrategy.REPLACE) fun addVehicleListItem(vehicleListItem:VehicleListItem) @Query("select * from vehicles_submitted where vehicle_id LIKE :vehicleID") fun getVehicleListItem(vehicleID:String):VehicleListItem 

VehicleListItem Entity

 @Entity(tableName = "vehicles_submitted", foreignKeys = arrayOf(ForeignKey(entity = Rally::class, parentColumns = arrayOf("rally_id"), childColumns = arrayOf("rally_id")))) class VehicleListItem { @PrimaryKey @ColumnInfo(name = "vehicle_id") @SerializedName("vehicle_id") var vehicleID : String = "" @ColumnInfo(name = "driver_id") @SerializedName("driver_id") var driverID : String = "" @ColumnInfo(name = "vehicle_name") @SerializedName("vehicle_name") var vehicleName : String = "" @ColumnInfo(name = "driver_name") @SerializedName("driver_name") var driverName : String = "" @ColumnInfo(name = "driver_email") @SerializedName("driver_email") var driverEmail : String = "" @ColumnInfo(name = "rally_id") @SerializedName("rally_id") var rallyID: String = "" @ColumnInfo(name = "is_passed") @SerializedName("is_passed") var isPassed = false @ColumnInfo(name = "passing_time") @SerializedName("passing_time") var passingTime:String="" } 

Solutions Collecting From Web of "Как проверить, вставлены ли данные в базу данных комнаты"

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

Если вы используете эмулятор, интегрированный с Android Studio или корневым телефоном, вы можете сделать следующее:

 adb root adb remount cd data/data/path/of/your/application/database sqlite3 mydb.db 

Затем вы можете запросить свои таблицы

Проблема была в потоке. Комната не позволяет запускать запросы базы данных в основном потоке. Метод вызова метода insert находился внутри блока try-catch, и я игнорировал исключение. Я исправил это, и вот как он читает прямо сейчас.

 doAsync { val addedID = appContext.db.rallyDAO().addVehicleListItem(vehicle) Logger.d("vehicle_lsit_item","Inserted ID $addedID") } 

Кроме того, я просмотрел документацию , метод insert может вернуть Long (или List of Long в случае List, переданного для вставки). Я также изменил подпись вставки, и вот измененный код

 @Insert(onConflict = OnConflictStrategy.REPLACE) fun addVehicleListItem(vehicleListItem:VehicleListItem):Long 

PS Я использую doAsync для doAsync