【问题标题】:Accessing data from ROOM DB using ViewModel and ID使用 ViewModel 和 ID 从 ROOM DB 访问数据
【发布时间】:2018-10-23 09:32:29
【问题描述】:

假设我在 Room DB 中有一个数据列表。 设数据为:setId、formId、formName。 单个 setId 中可以有多个 formId。设 setId 1 包含 10 个表单,2 包含 5 个表单。

现在我想做的是,使用 ViewModel 中的 setId 从数据库中提取数据。

让我的道成为:

@Query("SELECT * FROM form WHERE setId = :id")
LiveData<List<Form>> getAllFilledForms(int id);

如何在 ViewModel 中实现此类操作。 我想检索所有设置 id 相同的表单列表,让 1.

编辑: ViewModel 类:

public class ListSetViewModel extends AndroidViewModel {

private final LiveData<List<FormSet>> allFormSets;
private FormDatabase formDatabase;
public ListSetViewModel(@NonNull Application application) {
    super(application);
    formDatabase = FormDatabase.getDatabase(application);
    allFormSets = formDatabase.formSetDao().getAllFilledForms(setId);
}

public LiveData<List<FormSet>> getAllFormSets(setId){
    return allFormSets;
}
}

【问题讨论】:

  • 你的方法返回什么?你能指定你的代码的实际问题吗?
  • 我的方法根据 setId 返回表单列表。我打算做的是,使用 setId 从 DB 获取表单列表。我对 ViewModel 中此类操作的实际实现感到困惑。是否可以通过在 ViewModel 中传递参数来使用 Android ViewModel 从数据库中检索数据?
  • 不是已经将 setid 的值传递给您的 viewmodel 方法了吗? getAllFormSets(setId)这个方法的参数是什么?
  • 当时我很困惑。我错过了什么吗?
  • 您是如何从您的活动中调用该方法的?你应该已经传递了一个值来过滤你的数据。

标签: android viewmodel dao android-room


【解决方案1】:

您需要通过 Factory 或 Dagger2 为您的 ViewModel 注入 ID。或者您可以使用公共方法获取数据。

public LiveData<List<FormSet>> getAllFormSets(setId){
    return allFormSets = formDatabase.formSetDao().getAllFilledForms(setId);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多