0

我正在使用 Parse.com,为了获得我想要的信息,我使用它的查询。

所以我用那个:

ParseUser PhotoeUser;

ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
        UserQuery.whereEqualTo("objectId", PhotoID);
        UserQuery.getFirstInBackground(new GetCallback<Photo>() {
            @Override
            public void done(Photo pPhoto, ParseException error) {
                PhotoUser = pPhoto.getUser();
            }
        });

所以我想要的只是使用该PhotoUser查询的外部。但是当我写:

Log.i("Profile", "PhotoUser = " + PhotoUser.get("objectId"));

PhotoUser.get("objectId")null

另一个例子是这个:

public ParseUser getUser(){
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
        UserQuery.whereEqualTo("objectId", PhotoID);
        UserQuery.getFirstInBackground(new GetCallback<Photo>() {
            @Override
            public void done(Photo pPhoto, ParseException error) {
                PhotoUser = pPhoto.getUser();
            }
        });

return PhotoUser;
}

在这里,当我要返回时PhotoUser,它是null.

请帮我。如果您需要更多信息,请索取。

4

2 回答 2

1

你的方法

public ParseUser getUser(){
 ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
 UserQuery.whereEqualTo("objectId", PhotoID);
 UserQuery.getFirstInBackground(new GetCallback<Photo>() {
   @Override
   public void done(Photo pPhoto, ParseException error) {
    PhotoUser = pPhoto.getUser();
   }
 });

return PhotoUser;
}

退货null,因为只是在您退货时。您正在创建一个后台任务,该任务PhotoUser在完成时设置,但在创建任务后立即返回您对PhotoUser. 该任务稍后完成并设置您的PhotoUser. 因此,要么在任务完成时不返回任何内容并调用某个方法,要么ParseQuery.get()在找到对象之前使用哪些块。

另外,请在开头使用小写字母命名您的成员变量。(userQueryphotoUser)。

编辑:根据要求,将您的代码更改为:

public ParseUser getUser(){
 ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
 UserQuery.whereEqualTo("objectId", PhotoID);
 PhotoUser = UserQuery.getFirst().getUser();
 return PhotoUser;
}

或者

public void getUser(){
 ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
 UserQuery.whereEqualTo("objectId", PhotoID);
 UserQuery.getFirstInBackground(new GetCallback<Photo>() {
   @Override
   public void done(Photo pPhoto, ParseException error) {
    PhotoUser = pPhoto.getUser();
    doWork();
   }
 });
}

private void doWork() {
  // do what you want to do with your PhotoUser, it is not null now
}
于 2015-10-28T22:00:30.743 回答
0

只需将 ParseUser 带到块外:

PhotoUser pUser;
ParseQuery<Photo> UserQuery = ParseQuery.getQuery(Photo.class);
    UserQuery.whereEqualTo("objectId", PhotoID);
    UserQuery.getFirstInBackground(new GetCallback<Photo>() {
        @Override
        public void done(Photo pPhoto, ParseException error) {
            pUser = pPhoto.getUser();
        }
    });

不要忘记给变量命名。当您PhotoUser查询Photo.

于 2015-10-28T19:56:26.397 回答