Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android后端启动程序设置过滤器_Android_Backend - Fatal编程技术网

Android后端启动程序设置过滤器

Android后端启动程序设置过滤器,android,backend,Android,Backend,我正在尝试新的Android手机后端。我做了所有的基本样本,现在我想设置一个或多个过滤器。我只尝试了一个,但getCloudBackend()列表返回空列表 在实体中,我使用值过滤参数。如果我删除筛选的行,服务将返回一个包含数据的列表 如果我想按一个参数过滤,我必须做什么?如果我想按所有者筛选呢?如果我想放置多个过滤器 这是我的代码: getCloudBackend().clearAllSubscription(); CloudQuery cq = new CloudQuery("MyEntit

我正在尝试新的Android手机后端。我做了所有的基本样本,现在我想设置一个或多个过滤器。我只尝试了一个,但getCloudBackend()列表返回空列表

在实体中,我使用值过滤参数。如果我删除筛选的行,服务将返回一个包含数据的列表

如果我想按一个参数过滤,我必须做什么?如果我想按所有者筛选呢?如果我想放置多个过滤器

这是我的代码:

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(“消息”,“难以置信”)->这将起作用。。。不知道为什么区分大小写
  • 让我知道这是否是问题所在。

    您应该将收到的错误(或响应)发布到LogCat和后端日志中。过滤器有点棘手。我建议您查看文档以查看筛选器限制,并检查您可以发送、检索的数据以及如何发送

    关于查询,文档说明:

    云后端API中的查询有一些限制 从应用程序引擎数据存储。默认情况下,应用程序引擎会自动启动 为每个用户定义的属性创建索引(除 列表/映射属性)。此索引支持以下形式的 查询:-指定了种类名称,没有筛选器,没有排序-使用 仅索引属性上的相等筛选器(F.eq),无排序- 在单个数据库上仅使用不等式筛选器(如F.lt、F.ge)的查询 索引属性-在一个属性上具有一个排序顺序且没有索引的查询 过滤器

    例如,对于
    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);
        }
    
    在这种情况下,您可以对一个属性使用任意数量的过滤器,但它应该符合规则。 另外,阅读这篇文章和这篇文章可能会很有用