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()));
                }
            });

            }
        }
    });
4

5 回答 5

1

替换FridgeIdquery

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()));
                }
            });
于 2015-09-24T15:35:45.823 回答
0

您将获得一个空的 Parse 对象列表,因为没有任何行对应于用户(您已登录)。

Parse.com 通过使用称为 ACL 的字段来实现其数据的隐私。因此,如果用户 A 将条目添加到您的表中,默认情况下,用户 A 的 ACL 设置为 Read+Write,其他用户则没有。因此用户 B 将无法找到用户 A 的任何对象。

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

如果您想创建一种机制,只有属于某个组的用户才能读取和写入彼此的对象,您可以使用角色(解析功能)。

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

于 2015-09-29T17:15:37.740 回答
0

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

于 2015-12-11T11:34:41.597 回答
0

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

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
     }
 }
}

findInBackground()如果您没有 objectId 并设置一些条件,请致电。您还可以像这样在 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
     }
 }
}
于 2015-09-24T18:43:59.037 回答
0

如果您想获取用户列表,ParseQuery.getQuery但不起作用 - 试试这个:

val query: ParseQuery<ParseUser> = ParseUser.getQuery()
    query.findInBackground() {...}
于 2021-07-08T15:13:40.320 回答