Android后端启动程序设置过滤器
我正在尝试新的Android手机后端。我做了所有的基本样本,现在我想设置一个或多个过滤器。我只尝试了一个,但getCloudBackend()列表返回空列表 在实体中,我使用值过滤参数。如果我删除筛选的行,服务将返回一个包含数据的列表 如果我想按一个参数过滤,我必须做什么?如果我想按所有者筛选呢?如果我想放置多个过滤器 这是我的代码:Android后端启动程序设置过滤器,android,backend,Android,Backend,我正在尝试新的Android手机后端。我做了所有的基本样本,现在我想设置一个或多个过滤器。我只尝试了一个,但getCloudBackend()列表返回空列表 在实体中,我使用值过滤参数。如果我删除筛选的行,服务将返回一个包含数据的列表 如果我想按一个参数过滤,我必须做什么?如果我想按所有者筛选呢?如果我想放置多个过滤器 这是我的代码: getCloudBackend().clearAllSubscription(); CloudQuery cq = new CloudQuery("MyEntit
getCloudBackend().clearAllSubscription();
CloudQuery cq = new CloudQuery("MyEntity");
cq.setSort(CloudEntity.PROP_UPDATED_AT, Order.DESC);
cq.setLimit(100);
q.setFilter(F.eq("myparameter", "myvalue"));
cq.setScope(Scope.FUTURE_AND_PAST);
getCloudBackend().list(cq, handler);
过滤器区分大小写,在留言簿示例中:
cq.setFilter(F.eq(“消息”,“难以置信”)代码>->这不起作用。。。不要让谷歌云控制台愚弄你
cq.setFilter(F.eq(“消息”,“难以置信”)代码>->这将起作用。。。不知道为什么区分大小写
String
属性,您只能检查是否相等(eq/ne)。不能将相等过滤器与不相等过滤器混合使用。i、 e:
F.and(F.eq(PROPERTY_NAME, "Manuel"), F.gt(PROPERTY_AGE, Integer.valueOf(18)));
将给您一个错误DatastoreNeedIndexException
文件还说:
所有其他查询表单将在上引发DatastoreNeedIndexException
后端。要使用更复杂的查询形式,需要添加
在后端
为此,您需要在后端编辑数据存储索引.xml
。为此,您可以使用命令/appengine java sdk/bin/appcfg.sh update\u index myapp/war
看起来很有希望,虽然我还没有测试过
如果我想按一个参数过滤,我必须做什么
我认为最好使用getCloudBackend().listByProperty()
方法,而不是getCloudBackend().list()
此方法用法的示例:
getCloudBackend().listByProperty("yourKindName", "yourPropertyName", Op.EQ,
yourPropertyValueObject, null, 1, Scope.PAST, yourHandler);
getCloudBackend().listByPropertyAnd("yourKindName", "yourKindName", Order.DESC,
1000, Scope.FUTURE_AND_PAST, yourHandler,
F.gt("yourKindName", yourFirstValue),
F.lt("yourKindName", yourSecondValue), F.eq("date", mToday));
如果我想按所有者筛选呢
您可以使用上面列出的方法。只需输入您的所有者属性名,而不是yourPropertyName
如果我想放置多个过滤器
要对我在CloudBackendAsync
类中创建的一个属性使用多个筛选器,请执行以下操作:
public void listByPropertyAnd(String kindName, String propertyName,
CloudQuery.Order order, int limit, Scope scope,
CloudCallbackHandler<List<CloudEntity>> handler, F... filters) {
CloudQuery cq = new CloudQuery(kindName);
cq.setFilter(F.and(filters));
cq.setSort(propertyName, order);
cq.setLimit(limit);
cq.setScope(scope);
this.list(cq, handler);
}
在这种情况下,您可以对一个属性使用任意数量的过滤器,但它应该符合规则。
另外,阅读这篇文章和这篇文章可能会很有用