我有一个ViewModel,我正在使用LiveData,所以我有一个返回LiveData>的DAO,我可以让它工作,但实际上我希望它首先显示来自Room数据库的数据(如果有的话),然后当webservice返回新数据(如果有的话)时,将其写入数据库,然后用数据库中的最新数据更新ViewModel。我首先从数据库返回数据,并在后台将新数据写入数据库,但如何让ViewModel再次使用数据库中的新数据读取/更新?
谢谢你
søren
您可以使DAO
返回LiveData
。这意味着您可以得到关于该实体上的每个更改的通知。
假设您有一个用户
实体:
@Entity
data class User(
@PrimaryKey(autoGenerate = true) var uid: Int = 0,
@ColumnInfo(name = "name")
val name: String
)
和它相关的刀看起来像:
@Dao
interface UserDao {
@Query("SELECT * FROM user")
fun all(): LiveData<List<User>>
@Insert
suspend fun insert(vararg users: User)
}
class UserViewModel : ViewModel() {
val users: LiveData<List<User>> = userDao.all()
}
class UserActivity : AppCompatActivity() {
private val viewModel by viewModels<UserViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel.users.observe(this, Observer { users ->
// show data
})
}
}
因此,我使用LiveData和ViewModel设置获取和插入数据的功能,并使用Room数据库保存数据。 将数据插入数据库后,我的RecyclerView不会更新数据。 RecyclerAdapterTransaksi.kt 使用RecyclerView显示数据库数据的片段 Pemasukkanframent。kt 使用LiveData的ViewModel类 TransaksiViewModel.
我试图解决一个问题,但没有成功。每当数据库(数据库室)中特定模型的记录发生变化时,我想更新我的回收器视图。我使用ViewModel来处理模型数据,记录列表存储在LiveData中。 数据库 模型 刀 视图模型 碎片 现在,我的问题是为什么观察者只被调用一次(在片段的开始),然后没有被再次调用?我如何让观察者不断地倾听数据库中的变化(插入,更新,删除),以便我的回收器视图可以立即更新?非常感谢任何建
我在我的项目中集成了Firebase实时数据库。当活动打开时,我检查用户是否已经在数据库中检查,为此,我从调用方法。检查下面的代码。 问题:当数据插入firebase并在中回调/触发器时,如何更新/接收数据?
我在房间数据库中使用MVVM架构模式,当使用Livedata和update row时,它会立即显示recylerview中的更改。 但是我想在mvvm中使用Rxjava而不是livedata来显示数据和更改,但是当更新一行时,它不会立即在recyclerview中显示更改。这是我的代码: 道 LessonRepository 视图模型 获取片段中列表的方法 更新行的方法 我应该做什么,我应该修复哪
我有多个(大)JSON文件要添加到Firebase实时数据库(RTBD)中。我使用的是Geofire,因此所有子节点都需要在同一个父节点下。我存储静态地理数据,但我想定期分段刷新它。如果我不能分段刷新它,总是保证我正在更新的一个大JSON总是100%完成就会出现问题。 我想要的数据结构如下: 我的第一个JSON看起来像这样 我的第二个也是这样 我已尝试将firebase导入与合并标志一起使用: 并
问题内容: 我有两个Spark数据框: 数据框A: 和数据框B: 数据框B可以包含来自数据框A的重复行,更新行和新行。我想在spark中编写操作,在其中可以创建一个新数据框,其中包含数据框A的行以及数据框B的更新行和新行。 我首先创建一个仅包含不可更新列的哈希列。这是唯一的ID。所以我们可以说,并可以改变值(可更新),但是是唯一的。我创建了一个哈希函数为: 现在,我想编写一些火花代码,基本上从B中