6

我正在开发需要所有朋友的出生日期的应用程序。一些人可以分享代码如何使用图形 API 获取所有朋友的出生日期。我正在使用以下代码:

// start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {

      // callback when session changes state
      @Override
      public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {

          // make request to the 
            Request.executeMyFriendsRequestAsync(session, new Request.GraphUserListCallback() {

                @Override
                public void onCompleted(List<GraphUser> users, Response response) {
                    //Log.d("AL",""+users.size() + response.toString());
                    for (int i=0;i<users.size();i++){
                        Log.d("AL",""+users.get(i).toString());
                        welcome.setText("Done");
                    }

                }
            });
        }
      }
    });

这只是返回朋友的姓名和 ID。我必须在哪里设置权限才能获得朋友的生日?我是 facebook SDK 的新手。并使用 SDK v3。

图 api 正在返回以下 json 结果

{Response:  responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"data":[{"id":"1580811776","name":"Jamal Abdul Nasir"},{"id":"1610349118","name":"Ahmed Nawaz"}],"paging":{"next":"https:\/\/graph.facebook.com\/100004790803061\/friends?format=json&access_token=AAABtTr8g5U4BANiJdCiBFxQeg0l1eqYYzmSWVM8G1UlyAhTtUrAsoEZAgU19dECXTE2nw7pHIz8bDb7OJGM4wAwzusOVZAQN8yaiYVsQZDZD&limit=5000&offset=5000&__after_id=1610349118"}}}, error: null, isFromCache:false}

没有生日。

4

2 回答 2

13

首先定义您的回调,如果经过身份验证,您将在其中获得朋友和生日信息:

Session.StatusCallback statusCallback =  new Session.StatusCallback() {

  // callback when session changes state
  @Override
  public void call(Session session, SessionState state, Exception exception) {
    if (session.isOpened()) {
        // Private method, to be defined
        makeFriendsRequest();
    }
  }

};

然后,您可以打开会话并传入必要的“friends_birthday”权限请求:

Session session = new Session(this);
session.openForRead(new Session.OpenRequest(this)
                       .setCallback(statusCallback)
                       .setPermissions(Arrays.asList("friends_birthday")));

最后,这是您可以用来获取朋友信息(包括生日)的身份验证后方法:

private void makeFriendsRequest() {
    Request myFriendsRequest = Request.newMyFriendsRequest(Session.getActiveSession(), 
            new Request.GraphUserListCallback() {

        @Override
        public void onCompleted(List<GraphUser> users, Response response) {
            if (response.getError() == null) {
                // Handle response
            }

        }

    });
    // Add birthday to the list of info to get.
    Bundle requestParams = myFriendsRequest.getParameters();
    requestParams.putString("fields", "name,birthday");
    myFriendsRequest.setParameters(requestParams);
    myFriendsRequest.executeAsync();
}

如果您正在寻找实现 Facebook 登录的不同方法,还可以查看与 SDK 捆绑的 SessionLoginSample 应用程序。

于 2012-12-28T01:52:11.973 回答
0

我想尝试使用这个:

URL url = "http://YOUR_QUERY_URL_WITH_PARAMS";
InputStream is = null;
URLConnection connection = url.openConnection();
String line;
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(                        connection.getInputStream()));
while ((line = reader.readLine()) != null) 
{
    builder.append(line);
}
String jSONString = builder.toString();
JSONObject jSONObject = new JSONObject(jSONString);

然后把接收到的数据拿出来显示。

注意:我没有测试过这段代码,也没有安卓设备可以测试了,但应该会让你指向正确的方向。

于 2012-12-21T07:05:54.287 回答