2015-07-03 51 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; 
} 
相關問題