从ParseQuery方法返回String为空

时间:2017-08-13 12:39:32

标签: java parse-platform parse-server android-parsequeryadapter

我想将String返回到此语句:String replyUsername = queryUsernameById(objectId);

以下是查询方法:

public String queryUsernameById(String objectid) {

        final String[] username = {null};
        ParseQuery<ParseUser> userQuery = ParseUser.getQuery();
        userQuery.whereContains(ParseConstants.KEY_OBJECT_ID, objectid);
        userQuery.getFirstInBackground((user, e) -> {

            // We found messages!
            if (e == null) {

                username[0] = user.getUsername();

            } else {
                e.printStackTrace();
            }
        });
        return username[0];
    }

当我显示String时,它返回null。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你还没有显示你的其余代码,你真正使用这个值,所以很难肯定地说,但我的猜测是异步性让你搞砸了。查询在后台运行,因此如果您使用此值太接近函数调用,则查询尚未实际返回。您应该将值分配给完成处理程序中的标签,或者使用等待更新来更新标签的键值侦听器。

此外,还有一种专门用于通过Id获取对象的查询方法,而不是将objectId添加为查询约束。 query.get(objectId)或类似的东西,虽然我对Java SDK不太熟悉。它具有为不存在的对象返回101错误的好处,而不是具有成功回调的空数组/对象。

答案 1 :(得分:0)

我将方法更改为:

public String queryUsernameById(String objectId) {

        String username;
        ParseQuery<ParseUser> query = ParseUser.getQuery();
        query.whereContains(ParseConstants.KEY_OBJECT_ID, objectId);
        try {
            ParseUser result = query.getFirst();
            username = result.getUsername();
            return username;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

它有效,但它并不完全可靠。有时它返回null。奇怪。