安卓解析查询返回空列表

4
我有一个名为“classA”的解析类。我想构建一个查询,查找“classA”中具有某些“objectId”的行。我编写了以下代码。但它总是返回空的ParseObjects列表。我已经尝试使用“classA”中存在的单独列。每次都返回空的列表。请帮忙。
我之前在同一应用程序中的另一个类“classB”上使用过这个查询,并且它完美地工作。我还尝试了使用“query.find”实现“try-catch”块。那也返回空列表。谢谢提前帮助。请解释一下问题出在哪里。
需要更多的代码片段,请让我知道。
    Button btn = (Button) findViewById(R.id.query_btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText objIdET= (EditText) findViewById(R.id.obj_id);
            String objId= objIdET.getText().toString();
            Log.d("check", objId); // Prints correct value here..

            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("classA");
            fridgeID.whereEqualTo("objectId", objId);
            List<ParseObject> lp = new ArrayList<ParseObject>();
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    Log.d("#results", String.valueOf(objects.size()));
                }
            });

            }
        }
    });
5个回答

1

query替换FridgeId

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("classA");
            query.whereEqualTo("objectId", objId);
            List<ParseObject> lp = new ArrayList<ParseObject>();
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    Log.d("#results", String.valueOf(objects.size()));
                }
            });

请在 Parse 中检查您的列和类名,因为它们是大小写敏感的。 - Rajan Kali

0

你获取的 Parse 对象列表为空,因为没有与当前登录用户对应的行。

Parse.com 使用名为 ACL 的字段实现数据隐私。如果用户 A 向您的表中添加条目,则默认情况下 ACL 设置为 User A 可读写,其他用户不可读写。因此,用户 B 将无法找到用户 A 的任何对象。

更多阅读:https://parse.com/docs/android/guide#security

如果您想创建一种机制,只有属于特定组的用户才能读取+写入彼此的对象,则可以使用 Parse 的 Roles 功能。

https://parse.com/docs/android/guide#roles


0

检查您在应用程序中初始化解析时是否设置了正确的密钥。


0
如果您想获取用户列表,而ParseQuery.getQuery无法正常工作 - 请尝试以下方法:
val query: ParseQuery<ParseUser> = ParseUser.getQuery()
    query.findInBackground() {...}

0

如果您有该行的objectId,请使用getInBackground()

ParseQuery<ParseObject> query = ParseQuery.getQuery("classA");
query.getInBackground(objId, new GetCallback<ParseObject>() {
 public void done(ParseObject object, ParseException e) {
     if (e == null) {
         Log.d("#results", String.valueOf(objects.size()));
     } else {
         // Handle the error
     }
 }
}

如果您没有objectId并且需要设置一些条件,请调用findInBackground()。您也可以像这样在objectId字段上设置条件。
ParseQuery<ParseObject> query = ParseQuery.getQuery("classA");
query.whereEqualTo("objectId", objId);
query.findInBackground(new FindCallback<ParseObject>() {
 public void done(List<ParseObject> objects, ParseException e) {
     if (e == null) {
         Log.d("#results", String.valueOf(objects.size()));
     } else {
         // Handle the error
     }
 }
}

谢谢。但是,还是不行。我进一步检查了一下。它只在特定的活动中无法工作。相同的查询在MainActivity中产生正确的结果。有什么解决办法吗? - Reutzesen
你有遇到任何异常吗? - Ved
我正在打印错误。返回结果为 - 错误:未找到查询结果 - Reutzesen
也许您正在调用错误的类名或该类的错误objectId。请在Parse仪表板中检查该类的objectId。如果您在测试和开发中使用了两个不同的项目,请确保正确的项目已被选中。 - Ved
不,类名是正确的。它在其他活动(包括Main)中也停止工作了。使用免费帐户创建和查询的类数量是否有限制? - Reutzesen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接