2013-07-01 42 views
0

我正在开发一个获取用户的Facebook好友列表的Android应用程序。如何打开com.facebook.Session来获取用户的Facebook好友列表?

这是我的代码。

/** 
* 
* @param session 
* @return 
*/ 
private Request createRequest(Session session) 
{ 
    Request request = Request.newGraphPathRequest(session, "me/friends", null); 

    Set<String> fields = new HashSet<String>(); 
    String[] requiredFields = new String[] { "id", "name", "picture", 
      "gender" }; 
    fields.addAll(Arrays.asList(requiredFields)); 

    Bundle parameters = request.getParameters(); 
    parameters.putString("fields", TextUtils.join(",", fields)); 
    request.setParameters(parameters); 

    return request; 
} 

private void requestMyFacebookFriends(Session session) 
{ 
    Request friendsRequest = createRequest(session); 
    friendsRequest.setCallback(new Request.Callback() 
    { 

     @Override 
     public void onCompleted(Response response) 
     { 
      List<GraphUser> friends = getResults(response); 

      mLovers = filterFriendsToMeetUserGenderPref(friends); 
      // Set list adapter to show available lovers or friends. 
      setListAdapter(new SelectLoversAdapter(SelectLoversActivity.this, R.layout.item_select_lovers, mLovers)); 
     } 
    }); 
    friendsRequest.executeAsync(); 
} 

private List<GraphUser> getResults(Response response) 
{ 
    GraphMultiResult multiResult = response 
      .getGraphObjectAs(GraphMultiResult.class); 
    GraphObjectList<GraphObject> data = multiResult.getData(); 
    return data.castToListOf(GraphUser.class); 
} 

private Session.StatusCallback statusCallback = new Session.StatusCallback() 
{ 
    @Override 
    public void call(final Session session, SessionState state, Exception exception) 
    { 
     if(session.isOpened()) 
     { 
      requestMyFacebookFriends(session); 
     } 
    } 
}; 

private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback statusCallback) 
{ 
    OpenRequest openRequest = new OpenRequest(activity); 
    openRequest.setPermissions(Arrays.asList("user_birthday", "email")); 
    openRequest.setCallback(statusCallback); 

    Session session = new Session.Builder(activity).build(); 

    if(SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) 
    { 
     Session.setActiveSession(session); 
     session.openForRead(openRequest); 

     return session; 
    } 

    return null; 
} 

这里的主要方法是requestMyFacebookFriends,但是我有一个问题:**,我不知道如何实例com.facebook.Session

为了得到它,我使用了openActiveSession方法,但我不确定是否需要做所有事情,因为我对Facebook的开发非常陌生。

我在其他活动中使用openActiveSession以获取Facebook访问令牌。

我的问题是:我需要做些什么才能打开Session以获取用户的Facebook好友列表?

+0

如果您已经在另一个活动中打开了活动会话,则可以在当前活动中调用Session.getActiveSession()并使用该会话(当然,请检查null和isOpened())。有关打开会话的详细信息,请参阅入门指南 - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/ –

回答

1
String fqlQuery = "SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"; 
    Session session = Session.getActiveSession(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("q", fqlQuery); 

    Request request = new Request(session, "/fql", bundle, HttpMethod.GET, new Request.Callback() { 

     @Override 
     public void onCompleted(Response response) { 
      // TODO Auto-generated method stub 

      try { 

       GraphObject graphObject = response.getGraphObject(); 

       if(graphObject != null) 
       { 
        JSONObject jsonObject = graphObject.getInnerJSONObject(); 
        JSONArray jsonArray = jsonObject.getJSONArray("data"); 

        for (int i = 0; i < jsonArray.length(); i++) { 

         JSONObject object = jsonArray.getJSONObject(i); 
         String userFriendId = object.getString("uid"); 
        } 
       } 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }    
     } 
    }); 
    Request.executeBatchAsync(request); 

你可以用这样来的user.Hope本的朋友列表是你required.If你没有得到任何东西,那么请让我知道。

0
session.openForRead(new Session.OpenRequest(this).setCallback(callback).setPermissions(Arrays.asList("your_permissions"))); 

link可能会帮助你。

编辑:

public void getBirthdays(){ 
     Request fBdays = Request.newMyFriendsRequest(Session.getActiveSession(), new Request.GraphUserListCallback() { 

      @Override 
      public void onCompleted(List<GraphUser> users, Response response) { 
       if(response.getError() == null){ 
         for(GraphUser usr:users){ 
          Log.d(TAG,usr.getName()); 
         } 
       } 
      } 
     }); 

     Bundle requestParams = fBdays.getParameters(); 
     requestParams.putString("fields", "name,birthday,picture");//for extra properties 
     fBdays.setParameters(requestParams); 
     fBdays.executeAsync(); 
    } 
+0

感谢您的回答,但此代码将打开Facebook登录弹出?我不想那样,我想在没有任何登录的情况下得到朋友列表,我之前做过登录。 – VansFannel

相关问题