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

如何从后台服务更新ViewModel的LiveData和更新UI

薄鸿远
2023-03-14
public class MyViewModel extends ViewModel {
    private MutableLiveData<List<User>> users;
    public LiveData<List<User>> getUsers() {
        if (users == null) {
            users = new MutableLiveData<List<Users>>();
            loadUsers();
        }
        return users;
    }

    private void loadUsers() {
        // do async operation to fetch users
    }
}

活动可以按以下方式访问此列表:

public class MyActivity extends AppCompatActivity {
    public void onCreate(Bundle savedInstanceState) {
        MyViewModel model = ViewModelProviders.of(this).get(MyViewModel.class);
        model.getUsers().observe(this, users -> {
            // update UI
        });
    }
}

我的问题是,我要这样做:

>

  • loadusers()函数中,我异步获取数据,首先检查数据库(房间)中的数据

  • 共有1个答案

    黄丰
    2023-03-14

    我假设您使用的是android架构组件。实际上,无论您在哪里调用服务、asynctask或处理程序来更新数据都无关紧要。您可以使用PostValue(..)方法从服务或asynctask插入数据。您的类将如下所示:

    private void loadUsers() {
        // do async operation to fetch users and use postValue() method
        users.postValue(listOfData)
    }
    

    由于usersLiveDataRoom数据库负责向用户提供插入的数据。

    注意:在类似MVVM的体系结构中,存储库主要负责检查和提取本地数据和远程数据。

     类似资料:
    • 在RoomDatabase中创建数据库时,一切工作都很好,并且数据已成功加载,但是,我需要更新服务中生成的数据,问题是它需要下一行中的活动上下文: Dao接口: 存储库: 服务: 我希望服务在LiveData列表中执行、保存和刷新新结果,但我不能声明LiveData列表。

    • 我的应用程序使用MVVM架构。我有一个活动及其子片段共享的ViewModel。ViewModel包含一个简单的字符串,我想从活动中更新它,并在片段中观察它。 我的问题很简单:LiveData更新后,我的片段中永远不会到达observe回调。为了进行测试,我尝试在中观察数据,但效果很好。此外,在我在其他ViewModels中声明的片段中观察LiveData变量也可以很好地工作。奇怪的是,只有这个Vi

    • 因此,我使用LiveData和ViewModel设置获取和插入数据的功能,并使用Room数据库保存数据。 将数据插入数据库后,我的RecyclerView不会更新数据。 RecyclerAdapterTransaksi.kt 使用RecyclerView显示数据库数据的片段 Pemasukkanframent。kt 使用LiveData的ViewModel类 TransaksiViewModel.

    • 问题内容: 我正在尝试创建一个具有ActivityList信息的简单Android应用程序,当该应用程序启动时,我计划启动一个将不断计算数据(它将不断变化)的服务,并且我希望ActivityList与之同步服务在应用程序生命周期内正在计算的数据。 如何设置我的活动以收听服务?这是解决此问题的最佳方法吗? 例如,如果您想象一个股票价格列表,则该数据将定期更改,并且需要与不断计算/获取数据的(在我的情

    • 我试图解决一个问题,但没有成功。每当数据库(数据库室)中特定模型的记录发生变化时,我想更新我的回收器视图。我使用ViewModel来处理模型数据,记录列表存储在LiveData中。 数据库 模型 刀 视图模型 碎片 现在,我的问题是为什么观察者只被调用一次(在片段的开始),然后没有被再次调用?我如何让观察者不断地倾听数据库中的变化(插入,更新,删除),以便我的回收器视图可以立即更新?非常感谢任何建

    • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台