[英]How to store parseObject.getString() into a member variable
I am having a weird issue with ParseObject. 我在ParseObject上遇到了一个奇怪的问题。
I have a class that manages data with 1 member variables. 我有一个用1个成员变量管理数据的类。
String partnerEmail = "default@email.com";
I try to retrieve an email address from parseObject with: 我尝试使用以下命令从parseObject检索电子邮件地址:
object.getString("partnerEmail");
and I want to save it into my member variable (partnerEmail) but it never saves it. 而且我想将其保存到我的成员变量(partnerEmail)中,但它永远不会保存。 Here is full code of the method to read the partner email:
这是读取合作伙伴电子邮件的方法的完整代码:
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;
}
every time I run this code I see in logs: 每次我运行此代码时,我都会在日志中看到:
inside: example@mail.com (which is correct!)
内部:example@mail.com (正确!)
outisde: default@mail.com (which is the default)
outisde:default@mail.com (默认设置)
Any ideas why this happens or why I cant store the correct email inside my member variable? 有什么想法为什么会发生这种情况,或者为什么我不能在我的成员变量中存储正确的电子邮件? Thanks in advance!
提前致谢!
Use break keyword after Log.d("inside", partnerEmail); 在Log.d(“ inside”,partnerEmail)之后使用break关键字; this line.
这条线。 Something like this
像这样
if ( object != null ) {
partnerEmail = object.getString("partnerEmail");
Log.d("inside", partnerEmail);
break;
}
you have not initialization inside method your string. 您尚未在字符串的方法内部进行初始化。 try to this way like.
尝试以这种方式。
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;
}
now check your inside
& outside
log. 现在检查您的
inside
和outside
日志。
This is due to getFirstInBackground is a nonblocking-api, which contained a callback function. 这是由于getFirstInBackground是一个nonblocking-api,其中包含一个回调函数。 Done will be called after the thread(request for this query) finished, so that the outside-log will print first and then the inside-log.
在线程(对此查询的请求)完成后,将调用Done,以便首先打印外部日志,然后再打印内部日志。
If you want a blocking-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;
}
or let callback as an argument in findEmail, done will be called when it finished. 或让callback作为findEmail中的参数,完成将在完成时被调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.