小编Apf*_*t23的帖子

Android Room嵌入关系忽略SQL where条件

我是一个 SQL 菜鸟,不明白为什么我的语句会这样。它在 Android Room DAO 中使用并返回不需要的结果。

我有两个表中的示例数据: 在此输入图像描述

我有这样的声明:

@Transaction
    @Query("Select Distinct Category.* " +
            "from Category " +
            "inner join Items on Category.ID = Items.Category " +
            "where IsExcluded = 0 " + 
            "order by lower( Category.Name ) asc")
    LiveData<List<CatViewWithItemList>> getCatViewWithItemListGlobal();
Run Code Online (Sandbox Code Playgroud)

结果由一个简单的 POJO 接收:

public class CatViewWithItemList  {

    @Embedded
    public Cat myCat;

    @Relation(parentColumn = "ID",
            entityColumn = "Category") public List<ItemS> ItemList;
Run Code Online (Sandbox Code Playgroud)

问题: 我不明白结果:

在此输入图像描述

为什么第 5 项被退回?它应该被 where 子句排除。我的说法有错误吗?

MikeT 构建了一个包含相同错误的示例应用程序: 在此输入图像描述

(编辑:我现在已经放弃了布尔转换器,Room 似乎可以在没有它的情况下解析布尔值)或者这可能是由我的布尔值简单类型转换器引起的?一和零实际上是布尔值的占位符:

@TypeConverter
    public Boolean fromInt(int value) {
        return …
Run Code Online (Sandbox Code Playgroud)

sql dao pojo android-sqlite android-room

5
推荐指数
1
解决办法
1651
查看次数

Android 工作管理器:如何每月将作业排入队列一次

遵循这个问题,我研究了 Android 作业调度,如果我想每月做一次某事,工作管理器似乎是最新的工具。我构建了一个 Worker 类,并在我的活动中使用以下代码片段激活它:

PeriodicWorkRequest myWorkRequest =
                new PeriodicWorkRequest.Builder(MonthlyWorker.class, 20, TimeUnit.MINUTES)
                        .build();
WorkManager.getInstance().enqueueUniquePeriodicWork("my fancy test",ExistingPeriodicWorkPolicy.KEEP, myWorkRequest);
Run Code Online (Sandbox Code Playgroud)

虽然我成功测试了 20 分钟时间段,但存在一个问题:没有可用的月份时间单位,只有天数。由于明显的原因,每 30 天执行一次这项工作是行不通的,因为我需要在每个月的第一天执行该任务。所以我该怎么做?我必须使用不同的 API 吗?谢谢。

我可以做类似的事情if (dayOfMonth==1) do Function,但我认为这破坏了调度程序的目的。

android timeunit periodic-task android-workmanager

5
推荐指数
1
解决办法
2316
查看次数