我使用Parse.com作为我的后端,并希望创建一个方法,将查询对象的列作为Bundle返回。虽然我遇到了返回问题但是如何推迟返回直到查询完成?我想把它放在查询的done方法中,但由于它是一个void方法,所以不允许这样做。这是我的代码:
public static Bundle queryForExtras() {
final Bundle extras = new Bundle();
ParseQuery<Song> query = ParseQuery.getQuery(Song.class).fromPin(PIN_LABEL_SONG);
query.getFirstInBackground(new GetCallback<Song>() {
@Override
public void done(final Song song, ParseException e) {
if (e == null) {
extras.putString(COLUMN_SONGNAME, song.getSongname());
extras.putString(COLUMN_LYRICS, song.getLyrics());
// I WANT TO RETURN EXTRAS HERE
} else {
// Something went wrong
}
}
});
return extras;
}
如何实现我想要的行为?
答案 0 :(得分:4)
由于getFirstInBackground
显然是在后台执行,因此您无法直接返回方法queryForExtras
的值。如果你想使用getFirstInBackground
,你必须创建一种在收到包后调用的监听器。
然而,最简单的方法是使用不在后台运行的getFirst
方法。因此,您可以直接访问queryForExtras
中的结果:
public static Bundle queryForExtras() {
ParseQuery<Song> query = ParseQuery.getQuery(Song.class).fromPin(PIN_LABEL_SONG);
Song song = query.getFirst();
final Bundle extras = new Bundle();
extras.putString(COLUMN_SONGNAME, song.getSongname());
extras.putString(COLUMN_LYRICS, song.getLyrics());
return extras;
}