返回从ParseQuery方法的字符串为空
问题描述:
我想一个字符串返回此声明:String replyUsername = queryUsernameById(objectId);
返回从ParseQuery方法的字符串为空
下面是查询方法:
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];
}
当我显示的字符串返回空。我怎样才能解决这个问题?
答
我改变了方法,以这样的:
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。奇怪。
+0
如果在这里没有符合查询约束的值,那么结果可能是未定义的,当尝试调用'getUsername()'时会导致异常。 –
答
你还没有显示你的代码的其余部分,你实际使用这个值的地方,所以很难说肯定,但我的猜测是异步性在这里搞砸了你。查询在后台运行,所以如果您使用的值太接近函数调用,查询实际上还没有返回。您应该将值分配给完成处理程序中的标签,或者使用等待更新以更新标签的键值侦听器。
此外,还有一种查询方法,专门用于通过Id获取对象,而不是将objectId添加为查询约束。 query.get(objectId)
或类似的东西,虽然我不太熟悉Java SDK。它具有为不存在的对象返回101错误的好处,而不是具有成功回调的空数组/对象。
您是否从您的'else'块中收到错误?是'user.getUsername()'不为空? – tima
未打印任何堆栈跟踪。没有ParseException。 – santafebound