Как получить комментарии элементов Facebook Notes, используя несколько API Graph в приложении для Android? - PullRequest
3 голосов
/ 05 декабря 2011

Я хочу показать элементы заметок на странице Facebook с этими комментариями и лайками, используя Graph API.

Для этого я использую asyncFacebookRunner в Facebook SDK.

Шаги похожи на это:

  1. вызовите asyncFacebookRunner.request для получения элемента заметки с PageId

    mAsyncRunner.request (sAPIString, new NotesRequestListener (), null);

  2. Ответ пришел.(Я не могу выделить вызов функции. Извините за неудобство, чтобы найти его.)

    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
    
  3. вызвать другой asyncFacebookRunner.request, чтобы получить комментарии к элементу (с NoteID)

    в getUserComments

    mAsyncRunner.request (sAPIString, new CommentRequestListener (), null);

Перед получением комментариев (OnComplete в CommentRequestListener имеетне вызывается), getWordsItems возвращает массив элементов.

Так что я не вижу комментарии.

Как мне ждать обновления пользовательского интерфейса до получения комментариев?(Это так иронично синхронизировать асинхронные вызовы.)

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 января 2012

Использовать объект facebook, который имеет не асинхронный метод запроса.Вам не нужно реализовывать метод прослушивателя.

Итак, я предлагаю следующие способы.

  1. использовать mAsyncRunner.request для первого запроса вызова.
  2. использовать mFacebookRunner.request для второгоСвяжитесь со мной.

Я надеюсь, что это может помочь вам: -)

0 голосов
/ 06 декабря 2011

Используя FQL - Facebook Query Language, вы можете легко получить всю эту информацию о любом конкретном примечании , а также получить лайков по этому и комментируют его как примеры, приведенные в ссылках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...