ThanhTran
ThanhTran

Reputation: 21

Android - Parse.com - Return object from query callback

I tried to create a method that get a user by user's name. I'm using parse query. Here is my method:

 public ParseUser getUserByName(String name){
    ParseUser user;
    ParseQuery<ParseUser> query = ParseQuery.getQuery("_User");
    query.whereEqualTo("username", name);
    query.getFirstInBackground(new GetCallback<ParseUser>() {
        public void done(ParseUser result, ParseException e) {
            if (result== null) {
                Log.d("user", "Get user failed.");
            } else {
                user= result; // Compile error here, said: "Variable 'user' need to be declared final"
            }
        }
    });
    return user;
}

It complied error, and said that: "Variable 'user' need to be declared final". But, if I declared:

final ParseUser user;

so I can't assign the search result to user:

else {
          user= result; // Can't assign to user, because it's final.
     }

So How can I get and return the search result from query callback? Please help. Thanks.

Upvotes: 2

Views: 403

Answers (1)

Kishore Jethava
Kishore Jethava

Reputation: 6834

try this

 public ParseUser getUserByName(String name){
    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereEqualTo("username", name);
    try {
        return query.getFirst();
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

use

ParseUser parseUser = getUserByName("userName");
if(parseUser !=null){

}

Why getFirst();

Retrieves a list of ParseObjects that satisfy this query from the source in UI or Main Thread

why findInBackground();

Retrieves a list of ParseObjects that satisfy this query from the source in a background thread.

When we use findInBackground(); you can't return any result because your method will return result without waiting of done() response

Upvotes: 2

Related Questions