【问题标题】:Android Room - Query to return LiveData but limited by userIdAndroid Room - 查询返回 LiveData 但受 userId 限制
【发布时间】:2020-06-05 15:10:27
【问题描述】:

我试图通过 userId 来限制我的搜索结果。比如

@Query("SELECT * FROM exampleTable WHERE userId = :userId");
LiveData<List<Users>> getRecordsByUserId (long userId);

存储库

 private long userId;
 private LiveData<List<WorkoutLogsAllPojo>> weeklyWorkoutLogs;
 public WorkoutLogsRepository(Application application) {
         weeklyWorkoutLogs = workoutLogsDao.getWorkoutLogsWeekly(userId);
 }
 public LiveData<List<WorkoutLogsAllPojo>> getWorkoutLogsWeekly() {
    return weeklyWorkoutLogs;
 }

视图模型

 private long userId;
 private LiveData<List<WorkoutLogsAllPojo>> weeklyWorkoutLogs;
 public WorkoutLogsViewModel(@NonNull Application application) {
    super(application);
 weeklyWorkoutLogs = workoutLogsRepository.getWorkoutLogsWeekly(userId);
 }
  public LiveData<List<WorkoutLogsAllPojo>> getWorkoutLogsWeekly() {
    return weeklyWorkoutLogs;
 }

活动

  private void getWorkoutLogsWeekly() {

    workoutLogsViewModel.getWorkoutLogsWeekly(userId).observe(this, new Observer<List<WorkoutLogsAllPojo>>() {
                @Override
                public void onChanged(List<WorkoutLogsAllPojo> result) {

                }
        }
    );
}

我当前的代码返回 0 条记录。如果我从代码中删除 userId 内容,它将返回所有记录。有人可以帮我在此代码中实现 userId 约束,因此查询将只返回链接到该 userId 的记录。

【问题讨论】:

  • 为什么在 where 子句中有破折号? userId - :userId
  • 可能是您的 WHERE 子句中的拼写错误:userId - :userId。你不想要= 而不是-
  • 那是一个错字,我手动输入了那个查询。它在代码中是一个 =

标签: android android-sqlite android-room


【解决方案1】:

找到了解决办法:

将 Viewmodel 和存储库更新为:

 public LiveData<List<WorkoutLogsAllPojo>> getWorkoutLogs(long userId) {
    return WorkoutLogs = workoutLogsRepository.getWorkoutLogs(userId);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多