Android 存储在Room table中的设置只有一个条目,在任何参数更新时都会触发所有观察者
我使用简单的房间桌子进行设置Android 存储在Room table中的设置只有一个条目,在任何参数更新时都会触发所有观察者,android,android-room,android-livedata,Android,Android Room,Android Livedata,我使用简单的房间桌子进行设置 @Entity data class Settings(var user: String = "") { @PrimaryKey var id: Long = 1 var activeItem: Int = 0 var developerMode: Boolean = false var logoUrl: String = "" var advertisment: String = "" } 我用LiveData观
@Entity
data class Settings(var user: String = "") {
@PrimaryKey
var id: Long = 1
var activeItem: Int = 0
var developerMode: Boolean = false
var logoUrl: String = ""
var advertisment: String = ""
}
我用LiveData观察表中的变化。问题是,若所有数据都在一个id=1的条目中,那个么当表中的任何值被更新时,所有观察者都会被触发。有没有办法强迫LiveData仅在参数更改时观察,而不是整个条目?
我不想通过附加表来解决它,也不想将它存储在具有不同ID的条目中
以下是来自Dao的查询:
@Query("SELECT activeItem FROM Settings WHERE id = 1")
abstract fun getActiveItem(): LiveData<Int>
@Query("SELECT user FROM Settings WHERE id = 1")
abstract fun getUser(): LiveData<String>
@Query("SELECT developerMode FROM Settings WHERE id = 1")
abstract fun getDeveloperMode(): LiveData<Boolean>
@Query("SELECT logoUrl FROM Settings WHERE id = 1")
abstract fun getLogoUrl(): LiveData<String>
@Query("SELECT advertisment FROM Settings WHERE id = 1")
abstract fun getAdvertisment(): LiveData<String>
@Query(“从id=1的设置中选择activeItem”)
抽象趣味getActiveItem():LiveData
@查询(“从id=1的设置中选择用户”)
抽象fun getUser():LiveData
@查询(“从id=1的设置中选择developerMode”)
抽象有趣的getDeveloperMode():LiveData
@查询(“从id=1的设置中选择logoUrl”)
抽象趣味getLogoUrl():LiveData
@查询(“从id=1的设置中选择广告”)
抽象趣味GetAdvertisent():LiveData
您应该将其用于持久化用户首选项。您可以通过首选项更改侦听器侦听首选项更新
preferences.registerOnSharedPreferenceChangeListener { sharedPreferences, key ->
// handle preference update
}
或者,您可以实现自己的首选项注册表
sealed class
sealed class MyPreference
data class ActiveItemPreference(val number: Int) : MyPreference()
data class UserPreference(val name: String, val age: Int) : MyPreference()
PreferenceRegistry
实现为类型安全的异构容器(有效Java(第三)。第33项)
PreferencesRegistry[UserPreference::class].observe(this::getLifecycle) { userPref ->
if (userPref == null)
Log.w("PREFERENCES", "Unexpected nullable user preference")
else
Log.d("PREFERENCES", "User preference updated. New name is ${userPref.name} and new age is ${userPref.age}")
}
preferences.registerOnSharedPreferenceChangeListener { sharedPreferences, key ->
// handle preference update
}
或者,您可以实现自己的首选项注册表
sealed class
sealed class MyPreference
data class ActiveItemPreference(val number: Int) : MyPreference()
data class UserPreference(val name: String, val age: Int) : MyPreference()
PreferenceRegistry
实现为类型安全的异构容器(有效Java(第三)。第33项)
PreferencesRegistry[UserPreference::class].observe(this::getLifecycle) { userPref ->
if (userPref == null)
Log.w("PREFERENCES", "Unexpected nullable user preference")
else
Log.d("PREFERENCES", "User preference updated. New name is ${userPref.name} and new age is ${userPref.age}")
}
我已经在使用带有大约10张桌子的房间,包括备份还原功能,我不想包括任何其他存储。我想通过LiveData观察一个设置表来解决这个问题。我已经在使用包含10个表(包括备份还原功能)的Room,我不想包括任何其他存储。我想通过LiveData观察一个设置表来解决这个问题