当前位置: 首页 > 知识库问答 >
问题:

将数据从Room返回到ViewModel,然后使用来自webservice的新数据更新ViewModel

邢星波
2023-03-14

我有一个ViewModel,我正在使用LiveData,所以我有一个返回LiveData>的DAO,我可以让它工作,但实际上我希望它首先显示来自Room数据库的数据(如果有的话),然后当webservice返回新数据(如果有的话)时,将其写入数据库,然后用数据库中的最新数据更新ViewModel。我首先从数据库返回数据,并在后台将新数据写入数据库,但如何让ViewModel再次使用数据库中的新数据读取/更新?

谢谢你
søren

共有1个答案

潘安邦
2023-03-14

您可以使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中