Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Room LiveData两次启动,一次失效发射_Android_Viewmodel_Android Room_Android Livedata - Fatal编程技术网

Android Room LiveData两次启动,一次失效发射

Android Room LiveData两次启动,一次失效发射,android,viewmodel,android-room,android-livedata,Android,Viewmodel,Android Room,Android Livedata,这个问题最初是在一个具有MVVM体系结构(单个活动/多个片段)的项目中发现的,当时对数据库执行插入/删除操作,然后导航回主片段。然后,主片段重新订阅主视图模型中的LiveData,LiveData发射两次: 数据库操作之前对应的一个不正确的过时事件 数据库操作后对应的第二个正确事件 我创建了一个示例来演示这个问题(示例中没有MVVM或多个片段) 在示例应用程序中,您可以使用以下步骤观察陈旧事件: 使用“观察”按钮订阅Room LiveData 使用UNOBSERVE按钮取消订阅LiveDa

这个问题最初是在一个具有MVVM体系结构(单个活动/多个片段)的项目中发现的,当时对数据库执行插入/删除操作,然后导航回主片段。然后,主片段重新订阅主视图模型中的LiveData,LiveData发射两次:

  • 数据库操作之前对应的一个不正确的过时事件
  • 数据库操作后对应的第二个正确事件
我创建了一个示例来演示这个问题(示例中没有MVVM或多个片段)

在示例应用程序中,您可以使用以下步骤观察陈旧事件:

  • 使用“观察”按钮订阅Room LiveData
  • 使用UNOBSERVE按钮取消订阅LiveData
  • 使用“添加”按钮将元素插入房间数据库
  • 使用“观察”按钮订阅Room LiveData
然后可以看到触发了两个事件。第一种是陈腐的

有人知道如何确保在重新订阅LiveData后只触发一个正确的事件吗

注意:有关如何在单个活动/多片段体系结构中处理LiveData的背景信息,请参阅。我使用了这种方法,它导致了这个问题。

刚刚注意到了我所描述的确切问题的一个例子。