如何在 android 应用程序中使用多个 Graph API 获取 Facebook Notes Items 的评论?

Posted

技术标签:

【中文标题】如何在 android 应用程序中使用多个 Graph API 获取 Facebook Notes Items 的评论?【英文标题】:How to get comments of Facebook Notes Items using several Graph API in android app? 【发布时间】:2012-01-13 05:58:08 【问题描述】:

我想使用 Graph API 显示带有这些 cmets 和喜欢的 Facebook 页面的 Notes 项目。

为此,我在 Facebook SDK 中使用 asyncFacebookRunner。

步骤如下:

    调用 asyncFacebookRunner.request 以获取带有 PageId 的 Note Item

    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 以获取项目的 cmets(带有 NoteID)

    在 getUserComments 中

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

在获取cmets之前(CommentRequestListener中的OnComplete没有调用),getWordsItems返回item数组。

所以我看不到 cmets。

如何等待更新 UI 直到获得 cmets? (同步异步调用真是太讽刺了。)

提前致谢。

【问题讨论】:

【参考方案1】:

使用 FQL - Facebook 查询语言,您可以轻松获取有关任何 particular note info 的所有这些信息 , 也可以获得 likes on thatcomments over it 作为链接中给出的示例。

【讨论】:

我没有使用 Android Facebook SDK 项目来获得所有这些..但是我认为上面提到的 Quering Facbook 可以轻松获得所有这些东西。 感谢您的回答,尽管这不是我想要的。我认为您建议 FQL 获得 cmets 和喜欢。使用 Android facebook SDK,我已经可以得到 cmets & like Notes 项目。我首先得到笔记项目的ID。然后得到 cmets 和喜欢它。我的问题是我看不到 cmets & likes,因为应用程序在 cmets & likes 尚未到达之前显示项目内容。 您使用了 AsynccTask..为什么不调用第二个任务从第一个任务的 onPostExecute 获取 cmets..您可以根据使用 runOnUiThread 在任务的 onPostExecute 中获取数据来更新 UI 嗯...我在 OnCompleted 而不是 onPostExecute 上调用了第二个任务。我会根据你的建议尝试修改我的代码。让它可以工作。谢谢 :-) 看你有 2 个异步任务...首先调用 ..在 First 的 onPostExecute() 中你会得到注释信息 ..关于如果你想更新 ui 使用 runOnUiThread ..然后从那里调用第二个任务..在那个onPostExecute中做UI改变..如果你一步一步来会简单得多【参考方案2】:

使用具有非异步请求方法的 facebook 对象。 你不需要实现监听器方法。

所以,我建议下面的方法。

    使用 mAsyncRunner.request 进行第一次请求调用。 使用 mFacebookRunner.request 进行第二次请求调用。

希望对你有帮助:-)

【讨论】:

以上是关于如何在 android 应用程序中使用多个 Graph API 获取 Facebook Notes Items 的评论?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个 GPU 用于协同工作的多个模型?

如何在 Android 中使用多个类

如何在 Android 清单应用程序中添加多个“工具:替换”?

Android 因 minifyEnabled 和 AWS 调用而崩溃

不同版本 Gradle ,怎么和平共处

如何在 android 应用程序中使用多个 Graph API 获取 Facebook Notes Items 的评论?