我正在尝试使用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
迭代中有什么问题吗?请帮忙。
答案 0 :(得分:0)
这只适用于Graph API v1.0,之后删除了friends_*
权限。这使得无法获取朋友数据。 v1.0仅在2015年4月30日之前可用。
如果你正在使用v1.0,那么更容易查询
/me/friends?fields=id,likes.limit(500)