我想将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。我该如何解决这个问题?
答案 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。奇怪。