Невозможно установить флаг БД, чтобы проверить, было ли приложение запущено в первый раз или нет.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно установить флаг БД, чтобы проверить, было ли приложение запущено в первый раз или нет.

Сообщение Anonymous »

Я предварительно заполнил базу данных целочисленным значением -1, чтобы указать первый запуск приложения, и значение которого будет изменено при нажатии кнопки на 1. По сути, это флаг БД. Но я не могу прочитать значение и обновить его, а считываемое значение равно нулю, и да, схема та же самая, любая помощь, идеи и ссылки будут полезны
MainActivity

Код: Выделить всё

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val firstTimeViewModel: FirstTimeViewModel = viewModel()
val isFirstTimeLaunch = firstTimeViewModel.isFirstTimeLaunch
if(isFirstTimeLaunch.value?.isFirstTime == -1){
Column (
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(text ="The app was launched for first time")
Spacer(Modifier.height(16.dp))
Button(onClick = {
firstTimeViewModel.updateIsFirstTimeLaunch(FirstTime(1))
}) {
Text(text = "update db value")
}
}
}
else if(isFirstTimeLaunch.value?.isFirstTime == 1){
Text(text = "FirstTime launch is over")
}
}
}
}
FirstTimeViewModel

Код: Выделить всё

class FirstTimeViewModel(application: Application) : AndroidViewModel(application) {

val isFirstTimeLaunch : LiveData
private val repository: FirstTimeRepository

init {
val firstTimeDao = PassLockDB.getDatabase(application).FirstTimeDao()
repository = FirstTimeRepository(firstTimeDao)
isFirstTimeLaunch = repository.readIsFirstTime
}

fun updateIsFirstTimeLaunch(isFirstTime: FirstTime){
viewModelScope.launch(Dispatchers.IO) {
repository.updateIsFirstTime(isFirstTime)
}
}

}

FirstTimeRepository

Код: Выделить всё

class FirstTimeRepository(private val firstTimeDao: FirstTimeDao) {

val readIsFirstTime: LiveData = firstTimeDao.isFirstTimeLaunch()

suspend fun updateIsFirstTime(firstTime:FirstTime){
firstTimeDao.updateFirstTime(firstTime)
}
}

FirstTimeDao

Код: Выделить всё

@Dao
interface FirstTimeDao {

@Update
suspend fun updateFirstTime(firstTime: FirstTime)

@Query("SELECT *from FirstTimeLaunch")
fun isFirstTimeLaunch(): LiveData
}
База данных

Код: Выделить всё

@Database(entities = [FirstTime::class], version = 1, exportSchema = false)
abstract class PassLockDB : RoomDatabase() {

abstract fun FirstTimeDao(): FirstTimeDao
companion object{
@Volatile
private var INSTANCE: PassLockDB? = null

fun getDatabase(context: Context): PassLockDB {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
PassLockDB::class.java,
"FirstTimeLaunch"
).createFromAsset("Database/FirstTimeLaunch").build()
INSTANCE =
instance // use singleton , a single instance of database is very efficient
return instance
}
}
}
}
Сущность

Код: Выделить всё

@Entity (tableName = "FirstTimeLaunch")
data class FirstTime(
@PrimaryKey
val isFirstTime: Int
)

Приведенный выше код — это то, что я пробовал, но, похоже, он не работает должным образом: это перекомпоновка пользовательского интерфейса после обновления базы данных и выборка из базы данных предварительно заполненных данных, что -1

Подробнее здесь: https://stackoverflow.com/questions/783 ... ime-or-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»