Я хочу показать элементы заметок на странице Facebook с этими комментариями и лайками, используя Graph API.
Для этого я использую asyncFacebookRunner в Facebook SDK.
Шаги похожи на это:
вызовите asyncFacebookRunner.request для получения элемента заметки с PageId
mAsyncRunner.request (sAPIString, new NotesRequestListener (), null);
Ответ пришел.(Я не могу выделить вызов функции. Извините за неудобство, чтобы найти его.)
public class NotesRequestListener implements com.facebook.android.AsyncFacebookRunner.RequestListener
{
/**
* Called when the request to get notes items has been completed.
* Retrieve and parse and display the JSON stream.
*/
@Override
public void onComplete(String response, Object state) {
// TODO Auto-generated method stub
Log.i("My_TAG", "onComplete with response, state");
try
{
// process the response here: executed in background thread
final JSONObject json = new JSONObject(response);
JSONArray arrNotesItems = json.getJSONArray("data");
int l = (arrNotesItems != null ? arrNotesItems.length() : 0);
// !!!!
// This has another request call
// !!!!
final ArrayList<WordsItem> newItems = WordsItem.getWordsItems(arrNotesItems,getActivity());
WordsActivity.this.runOnUiThread(new Runnable() {
public void run() {
wordsItems.clear();
wordsItems.addAll(newItems);
aa.notifyDataSetChanged();
}
}); // runOnUiThread
} // try
catch (JSONException e)
{
Log.i("My_TAG", "JSON Error in response");
} // catch
} // onComplete
... other override methods ...
} // Request Listener
< Another Class >
public static ArrayList<WordsItem> getWordsItems(JSONArray arrJSON, Activity activity) {
ArrayList<WordsItem> wordsItems = new ArrayList<WordsItem>();
int l = (arrJSON != null ? arrJSON.length() : 0);
try {
WordsItem newItem;
for (int i=0; i<l; i++) {
JSONObject jsonObj = arrJSON.getJSONObject(i);
String sTitle = jsonObj.getString("subject");
String sNoteID = jsonObj.getString("id");
... get another fields here ...
newItem = new WordItem(...);
// !!!!
// This has request call for comments
// !!!!
ArrayList<CommentItem> arrComment = getUserComments(sNoteID);
wordsItems.add(newItem);
}
} catch (Exception e) {
e.printStackTrace();
}
return wordsItems;
} // getWordsItems
вызвать другой asyncFacebookRunner.request, чтобы получить комментарии к элементу (с NoteID)
в getUserComments
mAsyncRunner.request (sAPIString, new CommentRequestListener (), null);
Перед получением комментариев (OnComplete в CommentRequestListener имеетне вызывается), getWordsItems возвращает массив элементов.
Так что я не вижу комментарии.
Как мне ждать обновления пользовательского интерфейса до получения комментариев?(Это так иронично синхронизировать асинхронные вызовы.)
Заранее спасибо.