В моем проекте Android я использую библиотеку Room для работы с базой данных SQLite.Я использую свою базу данных для хранения телефонных кодов стран.В мою базу данных предварительно загружены две страны (смотреть populateDatabaseWithCountryCodes (dao: PhoneCodeDao) функция);
@Database(entities = [CountryCode::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun createPhoneCodeDao(): PhoneCodeDao
companion object {
@Volatile
private var INSTANCE: AppDatabase? = null
fun getDatabase(context: Context): AppDatabase {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"database"
).addCallback(PrepopulationCallback)
.build()
INSTANCE = instance
return instance
}
}
}
object PrepopulationCallback : RoomDatabase.Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
super.onCreate(db)
INSTANCE?.let { database ->
GlobalScope.launch(Dispatchers.IO) {
populateDatabaseWithCountryCodes(database.createPhoneCodeDao())
}
}
}
private fun populateDatabaseWithCountryCodes(dao: PhoneCodeDao) {
val spainPhoneCode = CountryCode(0, "Spain", 34)
val rusPhoneCode = CountryCode(1, "Russia", 7)
val list = LinkedList<CountryCode>()
list.add(spainPhoneCode)
list.add(rusPhoneCode)
dao.insertAllCountryCodes(list)
}
}
}
CountryCode entity
@Entity(tableName = "country_code")
data class CountryCode(
@SerializedName("order")
@ColumnInfo(name = "order_list") val order: Int,
@SerializedName("name")
@ColumnInfo(name = "country_name_eng") val name: String,
@SerializedName("phone_code")
@ColumnInfo(name = "phone_code") val phoneCode: Int
) {
@ColumnInfo(name = "id")
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}
Интерфейс DAO
@Dao
interface PhoneCodeDao {
@Insert
fun insertAllCountryCodes(list: List<CountryCode>)
@Query("SELECT phone_code FROM country_code WHERE order_list = :order")
fun selectCountryCodeByOrder(order: Int): Int
}
В моем приложении я выбираю код страны по порядку (функция просмотра selectCountryCodeByOrder (order: Int): Int ).Я вызываю эту функцию асинхронно внутри сопрограммы async {}.Но у меня есть довольно странная ошибка: Когда после установки я делаю первый запуск моего приложения на устройстве и выполняю запрос - результат запроса равен 0 (это означает, что результатов нет).Но при следующих запросах и при следующих запусках он работает великолепно - он возвращает 7 и 34 соответственно параметру порядка. Так что я очень запутался с этой ошибкой.Пожалуйста, помогите мне решить эту проблему