想要在 Android 中从 Parse getCallback 中获取数据

Want to get data out of Parse getCallback in Android

我正在使用 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;
}

这里,当我要return时PhotoUser,就是null

请帮帮我。如果您需要更多信息,请提出要求。

只需将 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();
        }
    });

别忘了给变量命名。我不知道当你查询 Photo.

时你想如何得到 PhotoUser

你的方法

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;
}

returns null 因为当你 return 的时候就是这样。您正在创建一个后台任务,它在完成时设置 PhotoUser,但在创建该任务后立即 return 您当前对 PhotoUser 的引用。该任务稍后完成并设置您的 PhotoUser。因此,要么你不 return 任何东西并在任务完成时调用一些方法,要么你使用 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
}