2015-07-03 47 views
3

我将Parse.com用作我的后端,并且希望创建一个将查询对象的列作为Bundle返回的方法。尽管如此,我仍然遇到了问题,如何才能推迟返回,直到查询完成?我想把它放在查询的完成方法中,但这是不允许的,因为它是一个无效的方法。这里是我的代码:仅在其内部的方法完成时才返回对象

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

Java版本你使用哪种? –

+0

不要返回。而是调用一个函数:)。 //我想要返回这里 doSomething(extras); –

+0

你可以返回'java.util.concurrent.Future '吗? –

回答

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; 
} 
相关问题