我对ParseObject有一个奇怪的问题。
我有一个用1个成员变量管理数据的类。
String partnerEmail = "default@email.com";
我尝试使用以下命令从parseObject检索电子邮件地址:
object.getString("partnerEmail");
我希望将其保存到我的成员变量(partnerEmail)中,但它永远不会保存它。 以下是阅读合作伙伴电子邮件的方法的完整代码:
public String findEmail( ) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable");
query.whereEqualTo("email", user.getEmail() );
query.getFirstInBackground( new GetCallback<ParseObject> ( ) {
public void done( ParseObject object, ParseException e) {
if ( object != null ) {
partnerEmail = object.getString("partnerEmail");
Log.d("inside", partnerEmail);
}
}
});
Log.d("outside", partnerEmail);
return partnerEmail;
}
每次运行此代码时,我都会在日志中看到:
inside:example@mail.com (这是正确的!)
outisde:default@mail.com (这是默认值)
为什么会发生这种情况或为什么我不能在我的成员变量中存储正确的电子邮件?提前谢谢!
答案 0 :(得分:0)
在Log.d(“inside”,partnerEmail)之后使用 break 关键字;这条线。像这样的东西
if ( object != null ) {
partnerEmail = object.getString("partnerEmail");
Log.d("inside", partnerEmail);
break;
}
答案 1 :(得分:0)
你没有在方法中初始化你的字符串。 尝试这样的方式。
public String findEmail() {
final String partnerEmail = null;
ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable");
query.whereEqualTo("email", user.getEmail());
query.getFirstInBackground(new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
// success
if (object != null) {
partnerEmail = object.getString("partnerEmail");
Log.d("inside", partnerEmail);
}
} else {
// error
}
}
});
Log.d("outside", partnerEmail);
return partnerEmail;
}
现在检查您的inside
&amp; outside
日志。
答案 2 :(得分:0)
这是因为getFirstInBackground是一个nonblocking-api,它包含一个回调函数。在线程(请求此查询)完成后将调用完成,以便首先打印外部日志,然后打印内部日志。
如果你想要一个阻止api。
public String findEmail( ) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("myTable");
query.whereEqualTo("email", user.getEmail() );
try {
ParseObject object = query.getFirst();
partnerEmail = object.getString("partnerEmail");
Log.d("inside", partnerEmail);
} catch (ParseException e) {
//error
}
Log.d("outside", partnerEmail);
return partnerEmail;
}
或者让callback作为findEmail中的参数,完成后将调用done。