0

我想在这个语句中返回一个字符串: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];
    }

当我显示字符串时,它返回为空。我怎样才能解决这个问题?

4

2 回答 2

1

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

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

于 2017-08-14T17:07:26.560 回答
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。奇怪的。

于 2017-08-13T12:59:50.233 回答