简体   繁体   English

如何将parseObject.getString()存储到成员变量中

[英]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. 现在检查您的insideoutside日志。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM