从facebook batchrequest读取值

时间:2015-01-19 07:55:23

标签: android facebook facebook-graph-api

我正在尝试使用Facebook的朋友阅读所有应用的相似内容。为此,我使用图形API获取ID,然后批量请求获取喜欢的内容。

但我无法在batchrequest中正确迭代值。我将在下面解释。

我正在使用以下代码来获取使用朋友的应用ID并存储在arraylist中。我在最后调用doBatchRequest,其中包含facebook batchrequest。

new Request(session,"/me/friends",null,HttpMethod.GET, new Request.Callback() {
   @Override
   public void onCompleted(Response response) {
      FBAnalysis_List = new ArrayList<FBAnalysisObj>();
      try {
         GraphObject graphObject = response.getGraphObject();
         JSONObject jsonObject = graphObject.getInnerJSONObject();
         if(graphObject!=null){
            JSONArray array = jsonObject.getJSONArray("data");
            for (int i = 0; i < array.length(); i++) {
               JSONObject object = (JSONObject) array.get(i);
               fbAnalysisObj_ref = new FBAnalysisObj();
               fbAnalysisObj_ref.setName(String.valueOf(object.get("name")));
               fbAnalysisObj_ref.setId(String.valueOf(object.get("id")));
               FBAnalysis_List.add(fbAnalysisObj_ref);
            }
            doBatchRequest();   
         }
      } catch (JSONException e) {e.printStackTrace();}
   }
}).executeAsync();

在doBatchRequest中:

Iterator fBAnalysis_List_itr = FBAnalysis_List.iterator();
while (fBAnalysis_List_itr.hasNext()) {
   fbAnalysisObj_ref = (FBAnalysisObj) fBAnalysis_List_itr.next();
   requestBatch.add(new Request(Session.getActiveSession(),"/"+fbAnalysisObj_ref.getId()+"/likes",null, null,new Request.Callback() {
      @Override
      public void onCompleted(Response response) {
         GraphObject graphObject = response.getGraphObject();
         JSONObject jsonObject = graphObject.getInnerJSONObject();
         try {
            JSONArray array = jsonObject.getJSONArray("data");
            Log.d(TAG, "array count "+array.length());
            likes_count=array.length();
            Log.d(TAG, "likes_count "+likes_count);
            fbAnalysisObj_ref.setLikes(String.valueOf(likes_count));
            Log.d(TAG, "fbAnalysisObj_ref.getLikes() "+fbAnalysisObj_ref.getLikes());
            Log.d(TAG, "fbAnalysisObj_ref.getName() "+fbAnalysisObj_ref.getName());
            FB_obj_iteration_count++;
         } catch (JSONException e) {
            e.printStackTrace();
         }
      }
   }));
}
requestBatch.executeAsync();

这里的问题是,在while迭代中,我得到列表中的最后一个facebook ID而不是所有ID。

即。在调用requestBatch.add之前,我正在获取列表中所有id的日志

In while id is 678081895623440
In while id is 1380238265604356

但在requestBatch.add之后,我最后获得了最后一张脸书ID。

array count 20
fbAnalysisObj_ref.getLikes() 7
fbAnalysisObj_ref.getName() Demo Imp
fbAnalysisObj_ref.getId() 1380238265604356
array count 0
fbAnalysisObj_ref.getLikes() 7
fbAnalysisObj_ref.getName() Demo Imp
fbAnalysisObj_ref.getId() 1380238265604356

迭代中有什么问题吗?请帮忙。

1 个答案:

答案 0 :(得分:0)

这只适用于Graph API v1.0,之后删除了friends_*权限。这使得无法获取朋友数据。 v1.0仅在2015年4月30日之前可用。

如果你正在使用v1.0,那么更容易查询

/me/friends?fields=id,likes.limit(500)