Android MVVM / Room从Dao或存储库中提取单个项目,最佳方法是什么?

问题描述 投票:0回答:1

我想使用MVVM / Room获得单个项目并在详细信息屏幕中对其进行编辑。我遵循了许多用于创建MVVM / Room应用程序的指南和示例。在其中许多存储库类中,如下所示:

public class ScenarioRepository {

    private static final String TAG="ScenarioRepository";

    private ScenarioDao scenarioDao;
    private LiveData<List<Scenario>> allScenarios;


    public ScenarioRepository(Application application) {

        AppDatabase database = AppDatabase.getInstance(application);
        scenarioDao = database.scenarioDao();
        allScenarios = scenarioDao.getAllScenarios();
    }
    ....
}

这些示例着重于填充RecyclerView,并且在编辑其中一条记录时,会将所有值从RecyclerView传递到编辑屏幕。通常,记录中包含的信息多于RecyclerView上显示的信息,因此我更愿意从数据库中提取记录,并看到了某些MVVM实现,其中DAO对此类项有特定的调用:

@Query("select * from Scenario where id = :id")
Scenario getItembyId(int id);

在此示例中检索我想要的方案的最佳方法是什么?当存储库从构造函数中的DOW中提取场景的完整列表时,为什么需要获取单个项目?我是否应该在存储库中通过某种方式从存储库中的成员变量allScenarios中提取方案,而不是返回数据库/房间?

android android-room android-mvvm
1个回答
0
投票

如果您不需要整个数据列表,而只需要单个项目,则按ID进行查询非常有用。

如果仍然观察到整个列表,但是对于某些UI组件需要按ID获取项目,我建议您为该特定项目ID过滤列表。

您可以通过问题中的查询来检索对象,或者如果要观察数据库中的更改,请将其包装在LiveData中。

© www.soinside.com 2019 - 2024. All rights reserved.