Android Facebook SDK getBirthday()返回null

时间:2014-04-09 10:43:10

标签: android facebook

我试图在Android应用中访问生日。但是生日返回null。我可以访问除生日之外的所有其他数据。

权限:

loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions(Arrays.asList("basic_info", "user_birthday", "email", "user_friends"));

生日功能:

Tools.LOG_INFO("birthday: " + user.getBirthday());

1 个答案:

答案 0 :(得分:1)

请试试这个:

 public void onClick(View v) {
    Logger.d(TAG, "Start FB session");
    // check if a session exists.
    Session currentSession = Session.getActiveSession();
    if (currentSession == null || currentSession.getState().isClosed()) {
        // create a new session.
        Session session = new Session.Builder(getApplicationContext()).build();
        // set it a the active session.
        Session.setActiveSession(session);
        // keep a variable link to session.
        currentSession = session;
    }
    // if a session is already open then issue a request using the available
    // session. Otherwise ask for user credentials.
    if (currentSession.isOpened()) {
        // The user is logged in.
        Logger.e(TAG, "User is logged in.");
        Session.getActiveSession().closeAndClearTokenInformation();
        Logger.i(TAG, "Session closed an token information cleared.");

        // get user data here with no extra call.
        Session.openActiveSession(this, true, new Session.StatusCallback() {
            @Override
            public void call(final Session session, SessionState state, Exception exception) {
                if (session.isOpened()) {
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                        @Override
                        public void onCompleted(GraphUser user, Response response) {
                            if (user != null) {
                                Logger.i(TAG, "User:" + user.getInnerJSONObject());
                            }
                        }
                    });
                }
            }
        });
    } else {
        // Ask for username and password
        OpenRequest op = new Session.OpenRequest((Activity) this);
        // don't use SSO.
        op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        // no callback needed.
        op.setCallback(null);
        // set permissions.
        List<String> permissions = new ArrayList<String>();
        permissions.add("email");
        permissions.add("user_birthday");
        op.setPermissions(permissions);
        // open session for read.
        currentSession.openForRead(op);
        Logger.d(TAG, "Session open for read request issued.");
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Logger.d(TAG, "Request code is: " + requestCode);
    Logger.d(TAG, "Result code is: " + resultCode);
    super.onActivityResult(requestCode, resultCode, data);
    if (Session.getActiveSession() != null)
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);

    Session currentSession = Session.getActiveSession();
    if (currentSession == null || currentSession.getState().isClosed()) {
        Session session = new Session.Builder(getApplicationContext()).build();
        Session.setActiveSession(session);
        currentSession = session;
    }

    if (currentSession.isOpened()) {
        Session.openActiveSession(this, true, new Session.StatusCallback() {
            @Override
            public void call(final Session session, SessionState state, Exception exception) {
                if (session.isOpened()) {
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                        @Override
                        public void onCompleted(GraphUser user, Response response) {
                            if (user != null) {
                                Logger.i(TAG, "User:" + user.getInnerJSONObject());
                            }
                        }
                    });
                }
            }
        });
    }
}