0

我有这个片段

  AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);
                    Bundle bundle = new Bundle();
                    bundle.putString("fields", "birthday");
                    mAsyncRunner.request("me/friends", bundle, new FriendListRequestListener());

它以某种方式起作用,我的意思是我可以读取所有朋友的 ID。但是在我想阅读所有内容时,我该怎么做?

    String _error = null;

        JSONObject json = Util.parseJson(response);
        final JSONArray friends = json.getJSONArray("data");

        for (int i = 0; i < friends.length(); i++) {
            Log.v("id:", "id= "+friends.get(i).toString());
         }

我应该怎么做才能获取有关我朋友的信息并阅读该信息

我想这是关键,这是我找到的示例,它工作正常

bundle.putString("fields", "birthday");

但是当我举个例子时,它不起作用

bundle.putString("fields", "friends_relationships");

----------------- 编辑 1-------------------------

权限代码

    mFacebook.authorize(Example.this, new String[] {"offline_access", "user_interests", "friends_interests","friends_relationships","friends_relationship_details"},new DialogListener() {
        @Override
        public void onComplete(Bundle values) {}

        @Override
        public void onFacebookError(FacebookError error) {}

        @Override
        public void onError(DialogError e) {}

        @Override
        public void onCancel() {}
   });

-------------- 编辑 2 --------------

{"error":{"message":"必须使用活动访问令牌来查询当前用户的信息。","type":"OAuthException","code":2500}}

4

4 回答 4

1

在大多数情况下,Graph API 是明智的选择。要检索您的朋友信息,您需要先从用户那里收集一些扩展权限。然后,您可以检索除基本信息之外的更多信息。

以下是与朋友不同类型信息相关的扩展权限列表

friends_about_me        
friends_activities      
friends_birthday
friends_checkins        
friends_education_history       
friends_events
friends_games_activity      
friends_groups      
friends_hometown
friends_interests       
friends_likes       
friends_location
friends_notes       
friends_online_presence     
friends_photo_video_tags 
friends_photos      
friends_relationship_details        
friends_relationships
friends_religion_politics       
friends_status      
friends_subscriptions
friends_videos      
friends_website     
friends_work_history

facebook.authorize(this, new String[] {"offline_access", "user_interests", "friends_interests"},

编辑 :-

如果您的应用需要的不仅仅是这些基本信息才能运行,您必须向用户请求特定权限。这是通过将 String[] 权限传递给 authorize 方法来完成的。以下示例显示了如何请求访问用户的电子邮件地址、获取扩展访问令牌和在一个地方签入用户:

facebook.authorize(this, new String[] { "email", "publish_checkins" },

      new DialogListener() {
           @Override
           public void onComplete(Bundle values) {}

           @Override
           public void onFacebookError(FacebookError error) {}

           @Override
           public void onError(DialogError e) {}

           @Override
           public void onCancel() {}
      }
);

在这里查看更多详细信息。

编辑 :-

 mAsyncRunner.request("me/friends?fields=id,name,birthday,relationship_status", new FriendListRequestListener());

JSONObject json = Util.parseJson(response);
final JSONArray friends = json.getJSONArray("data");

for(int i=0;i<friends.length();i++)
{
    JSONObject object = friends.getJSONObject(i);
    Log.i("------------------ Id",object.getString("id"));
    Log.i("------------------ Name",object.getString("name"));
    Log.i("------------------ RelationShip",object.getString("relationship_status"));
 }
于 2012-09-17T12:19:49.227 回答
0

您的朋友关系有单独的权限。查看权限文档

你会想要请求 -

  • friends_relationships
  • friends_relationship_details
于 2012-09-17T12:19:30.287 回答
0

到 2015 年 5 月,当 v1.0 facebook Graph API 被弃用时,这已经不再可能了。

于 2016-03-14T16:19:34.667 回答
-1

试试这个 :

 Bundle params = new Bundle();
 params.putString("fields", "name, picture, location");
    mAsyncFacebook.request("me/friends",params, new RequestListener(){
        @Override
        public void onComplete(String response, Object object) {
            JSONObject jsonObject = null;
            try {
                jsonObject = new JSONObject(response);
            } catch (JSONException e) {
                Log.d(TAG,"Exception :"+e);
            }

        }
   }

要了解密钥,请参阅此链接:https ://developers.facebook.com/docs/authentication/permissions/

于 2012-09-17T12:21:55.137 回答