Android 无法从Facebook SDK检索数据

Android 无法从Facebook SDK检索数据,android,facebook,facebook-graph-api,android-studio,exception,Android,Facebook,Facebook Graph Api,Android Studio,Exception,你知道为什么我不能从Facebook上收到电子邮件吗?我犯了这样的错误,“电子邮件”或类似的东西没有价值 private void fbInit() { // Initialize the SDK before executing any other operations, FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); callb

你知道为什么我不能从Facebook上收到电子邮件吗?我犯了这样的错误,“电子邮件”或类似的东西没有价值

    private void fbInit() {
    // Initialize the SDK before executing any other operations,
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    callbackManager = CallbackManager.Factory.create();

    // get new instance of fb
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    loginResult.getAccessToken().getUserId();

                    getFbData(loginResult.getAccessToken().getUserId());
                }

                @Override
                public void onCancel() {

                }

                @Override
                public void onError(FacebookException error) {

                }
            });

    // access token tracker init
    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(
                AccessToken oldAccessToken,
                AccessToken currentAccessToken) {
            // Set the access token using
            // currentAccessToken when it's loaded or set.
            accessToken = currentAccessToken;
            updateWithToken(currentAccessToken);
        }
    };

    // If the access token is available already assign it.
    accessToken = AccessToken.getCurrentAccessToken();
    updateWithToken(accessToken);

    // is this need?!
//        profileTracker = new ProfileTracker() {
//            @Override
//            protected void onCurrentProfileChanged(
//                    Profile oldProfile,
//                    Profile currentProfile) {
//                // App code
//            }
//        };
}

private void updateWithToken(AccessToken currentAccessToken) {
        // this way I check if there is email permission which is needed to register/login
        if (currentAccessToken != null
                && !currentAccessToken.getDeclinedPermissions().contains("email")
                && !currentAccessToken.getDeclinedPermissions().contains("basic_info")) {
            // go to other activity (?)
        } else {
            ActivityUtils.showToast(this, "no email permission");
        }
    }

private void getFbPermissions() {
    Collection<String> permissions = Arrays.asList("public_profile", "email", "user_photos", "user_birthday");
    LoginManager.getInstance().logInWithReadPermissions(this, permissions);
}

private void getFbData(String userId) {
    GraphRequest request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(),
            new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    if (response != null) {
                        try {
                            Log.i("LoginActivityFbResponse", response.toString());
                            ActivityUtils.showToast(getActivity(),
                                    object.getString("id") + object.getString("name") + object.getString("email")
                                            + object.getJSONArray("location").getString(1) + object.getString("locale")
                                            + object.getString("birthday") + object.getString("gender"));

                            // TODO: try to login
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
    Bundle parameters = new Bundle();
    parameters.putString("fields", "id, name, email");
    request.setParameters(parameters);
    request.executeAsync();
}
private void fbInit(){
//在执行任何其他操作之前初始化SDK,
sdkinInitialize(getApplicationContext());
AppEventsLogger.activateApp(此);
callbackManager=callbackManager.Factory.create();
//获取fb的新实例
LoginManager.getInstance().registerCallback(callbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
loginResult.getAccessToken().getUserId();
getFbData(loginResult.getAccessToken().getUserId());
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常错误){
}
});
//访问令牌跟踪器初始化
accessTokenTracker=新的accessTokenTracker(){
@凌驾
更改CurrentAccessToken时受保护的void(
AccessToken oldAccessToken,
AccessToken(当前AccessToken){
//使用设置访问令牌
//当加载或设置currentAccessToken时。
accessToken=currentAccessToken;
updateWithToken(currentAccessToken);
}
};
//如果访问令牌可用,则已分配它。
accessToken=accessToken.getCurrentAccessToken();
updateWithToken(accessToken);
//这需要吗?!
//profileTracker=新的profileTracker(){
//@覆盖
//更改CurrentProfile时受保护的无效(
//配置文件oldProfile,
//配置文件(当前配置文件){
////应用程序代码
//            }
//        };
}
私有void updateWithToken(AccessToken currentAccessToken){
//通过这种方式,我检查是否有注册/登录所需的电子邮件权限
如果(currentAccessToken!=null
&&!currentAccessToken.getDeclinedPermissions()包含(“电子邮件”)
&&!currentAccessToken.getDeclinedPermissions()包含(“基本信息”){
//转到其他活动(?)
}否则{
ActivityUtils.showtoos(此为“无电子邮件许可”);
}
}
私有void getFbPermissions(){
收集权限=Arrays.asList(“公共档案”、“电子邮件”、“用户照片”、“用户生日”);
LoginManager.getInstance().logInWithReadPermissions(此,权限);
}
私有void getFbData(字符串userId){
GraphRequest请求=GraphRequest.newmereRequest(
AccessToken.getCurrentAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
if(响应!=null){
试一试{
Log.i(“LoginActivityFbResponse”,response.toString());
ActivityUtils.showtoos(getActivity(),
object.getString(“id”)+object.getString(“名称”)+object.getString(“电子邮件”)
+object.getJSONArray(“位置”).getString(1)+object.getString(“区域设置”)
+object.getString(“生日”)+object.getString(“性别”);
//TODO:尝试登录
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“id、名称、电子邮件”);
请求。设置参数(参数);
request.executeAsync();
}

顺便说一句,我想从Facebook上至少获得以下数据:电子邮件、身份证、性别、生日、地点和姓名

您的生日出现错误,因为您在
GraphRequest
中没有生日权限。 像这样使用它:

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();

你能试试这个结果吗?

你的生日有错误,因为你在
图形请求中没有生日权限。
像这样使用它:

Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();

你能试试这个结果吗?

你能看看这个问题吗,他不像你那样收到电子邮件:试试这个链接@GilSnovsky,不要问什么是
SessionState
。@YasinKaçmaz没有帮助。。。生日错误…你能看看这个问题吗,他不像你一样收到电子邮件:试试这个链接@GilSnovsky,因为不知道什么是
SessionState
。@YasinKaçmaz没有帮助。。。生日错误…我有以下内容:
parameters.putString(“字段”、“id、姓名、电子邮件、性别、生日、图片、键入(大)”在我读了这篇文章的评论之后。但仍然只有生日没有值,有错误:
生日没有值
…我有:
参数。putString(“字段”、“id、姓名、电子邮件、性别、生日、图片。键入(大)”)在我读了这篇文章的评论之后。但仍然只有生日没有值,有错误:
生日没有值
。。。