如何在 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 that 和 comments 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 的评论?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 清单应用程序中添加多个“工具:替换”?
Android 因 minifyEnabled 和 AWS 调用而崩溃
如何在 android 应用程序中使用多个 Graph API 获取 Facebook Notes Items 的评论?