想要在 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()
阻塞直到它找到对象。
另外,请在命名成员变量时以小写字母开头。 (userQuery
和 photoUser
)。
编辑: 根据要求,将您的代码更改为:
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
}