比较具有空值

时间:2016-11-29 20:58:54

标签: android date parse-platform

我正在使用自定义适配器在活动中显示一些帖子(由用户创建)。在自定义适配器的构造函数中,我使用以下代码来获取查询结果。

ParseQuery query = new ParseQuery("Post");
query.whereWithinMiles("location_point", my_point, 500);
query.whereGreaterThan("expire_date", new Date());
return query;

目标 - 用户可以为每个帖子设置过期日期,以便在过期后该帖子不再可见。我正在尝试将 expire_date 列与当前时间进行比较,以检查帖子是否已过期。

稍后添加了行query.whereGreaterThan("expire_date", new Date());。以前创建的所有行在 expire_date 列中都有 null 值。

因此,每次运行查询时,都会根据条件检查在expire_date列中的日期对象的所有行。 expire_date列中的行具有空值永远不会返回

注意:expire_date列不是必填字段(用户可以选择在创建帖子时将其留空)。

是的,我可以为所有空/空字段设置默认日期,以与过期日期进行比较。但我很想知道是否有办法让我可以返回所有具有空值的行,或者将当前时间与具有whereGreaterThan条件的空对象进行比较?

1 个答案:

答案 0 :(得分:1)

ParseQuery notExpiredPosts = new ParseQuery("Post");
query.whereGreaterThan("expire_date", new Date());

ParseQuery noExpiredDate = new ParseQuery("Post");
query.doesNotExist("expire_date");

ParseQuery expiredDateQuery = ParseQuery.or(notExpiredPosts, noExpiredDate);

ParseQuery query = new ParseQuery("Post");
query.whereWithinMiles("location_point", my_point, 500);
query.whereMatchesKeyInQuery("objectId", "objectId", expiredDateQuery);
return query;
  

[(NotExpiredPost || NoExpiredDate)& (location_point在500英里内)]

这就是你想要的,不是吗?

希望这会有所帮助:)