【问题标题】:Android - ParseQuery<ParseObject> whereMatches returns empty listAndroid - ParseQuery<ParseObject> whereMatches 返回空列表
【发布时间】:2014-12-18 02:23:37
【问题描述】:

我正在向 parse.com 服务器编写查询。

当我使用 whereContainedIn 时,我会返回一个列表。

final ArrayList<String> searchList = new ArrayList<String>(1);
                    String searchRegexText = mSearchEdit.getText().toString();
                    searchList.add(searchRegexText);
                    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_PRODUCTS);
                    query.whereContainedIn(KEYWORDS, searchList);
                    query.findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> list, ParseException e) {
                            List<ParseObject> temp =  list;
                        }
                    });

当我使用 whereMatches 时,我得到一个空列表:

                    String searchRegexText = mSearchEdit.getText().toString();
                    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_PRODUCTS);
                    query.whereMatches(KEYWORDS, searchRegexText);
                    query.findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> list, ParseException e) {
                            List<ParseObject> temp =  list;
                        }
                    });

为什么?

【问题讨论】:

    标签: android parse-platform


    【解决方案1】:

    根据Parse APIhere,对于ParseQuery

    whereContainedIn:

    public ParseQuery<T> whereContainedIn(String key,
                                          Collection<? extends Object> values)
    

    向查询添加一个约束,要求将特定键的值包含在提供的值列表中。

    whereMatches:

    public ParseQuery<T> whereMatches(String key,
                                      String regex)
    

    添加正则表达式约束以查找与提供的正则表达式匹配的字符串值。对于大型数据集,这可能会很慢。

    显然,第二个需要Regex (Regular Expressions)

    【讨论】:

    • 为什么 mSearchEdit.getText().toString() 不是正则表达式,意思是字符串与 mSearchEdit.getText().toString() 具有相同的文本?
    • 正则表达式与常规字符串不同,如下所示:(?en.wikipedia.org/wiki/Regular_expression
    • 所以在这种情况下我需要使用 "(" +mSearchEdit.getText().toString() + ")" ?
    • 没那么简单。你可以在这里看到教程:youtube.com/playlist?list=PLFA4F2FDD28D0C40E
    • 那个链接对我有帮助。它处理 java reg 语法。
    【解决方案2】:

    我认为您试图查询错误。如果您只是尝试针对单个值查询特定键,您可以简单地执行此操作。

    String searchRegexText = mSearchEdit.getText().toString();
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_PRODUCTS);
    query.whereEqualTo(KEYWORDS, searchRegexText);
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> list, ParseException e) {
            List<ParseObject> temp =  list;
        }
    });
    

    我假设 'KEYWORDS' 是一个字符串变量,它定义了您正在搜索的列名。

    编辑:

    如果您尝试查找以特定字符串开头的所有对象,那么您可以使用它来代替:

    String searchRegexText = mSearchEdit.getText().toString();
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_PRODUCTS);
    query.whereStartsWith(KEYWORDS, searchRegexText);
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> list, ParseException e) {
            List<ParseObject> temp =  list;
        }
    });
    

    【讨论】:

    • 其实我的最终目标是获取所有以mSearchEdit.getText().toString()开头的ParseObject。所以我需要使用 whereMatches 函数。
    • 检查我的答案中的编辑,寻找一种无需使用正则表达式即可搜索字符串开头的方法
    • 我试过你的方法,但我在回调中得到一个 ParseException e 文本:“com.parse.ParseException: $regex only works on string fields”
    • KEYWORD 定义的列的类型是什么?类型必须是字符串才能使用此方法
    • 我不知道它是否是一个字符串,因为我只在客户端工作。但如果这是问题所在,为什么 whereContainedIn 对我有用?它也只需要一个字符串。
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 2015-11-16
    相关资源
    最近更新 更多