Android Facebook SDK我只能访问公共数据

Android Facebook SDK我只能访问公共数据,android,android-studio,facebook-graph-api,Android,Android Studio,Facebook Graph Api,我无法访问电子邮件和出生日期等数据。在我看来,这似乎是一种象征,但我正在寻找信息,我看不到发生了什么。也许有人会注意到一个错误或遇到类似的事情 public class MainActivity extends AppCompatActivity { TextView txtStatus; LoginButton loginButton; CallbackManager callbackManager; public String email,id;

我无法访问电子邮件和出生日期等数据。在我看来,这似乎是一种象征,但我正在寻找信息,我看不到发生了什么。也许有人会注意到一个错误或遇到类似的事情

public class MainActivity extends AppCompatActivity {

    TextView txtStatus;
    LoginButton loginButton;
    CallbackManager callbackManager;
    public String email,id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        initializeControls();
        loginWithFB();

    }

    private void initializeControls(){
        callbackManager = CallbackManager.Factory.create();
        txtStatus = (TextView)findViewById(R.id.txtStatus);
        loginButton = (LoginButton)findViewById(R.id.login_button);

    }

    private void loginWithFB(){
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.e("Success", "Login");
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name ,email, gender, birthday");

                GraphRequest gr = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject json, GraphResponse response) {
                                if (response.getError() != null) {
                                    // handle error
                                    System.out.println("ERROR "+response.getError().toString());
                                } else {
                                    //System.out.println("Success");

                                    String jsonresult = String.valueOf(json);
                                    System.out.println("JSON Result"+jsonresult);
                                    String resp = String.valueOf(response.getJSONObject());
                                    System.out.println("JSON resp "+resp);


                                }
                            }

                        });
                gr.setParameters(parameters);
                gr.executeAsync();

            }

            @Override
            public void onCancel() {
                txtStatus.setText("Cancelled");
            }

            @Override
            public void onError(FacebookException error) {
                txtStatus.setText("Error " + error.getMessage());
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}
public类MainActivity扩展了AppCompatActivity{
TextView txtStatus;
登录按钮登录按钮;
CallbackManager CallbackManager;
公共字符串电子邮件,id;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
初始化控件();
loginWithFB();
}
私有void initializeControl(){
callbackManager=callbackManager.Factory.create();
txtStatus=(TextView)findViewById(R.id.txtStatus);
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
}
私有void loginWithFB(){
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.e(“成功”、“登录”);
Bundle参数=新Bundle();
parameters.putString(“字段”、“id、名字、姓氏、电子邮件、性别、生日”);
GraphRequest gr=GraphRequest.NEWMERQUEST(
loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共void(JSONObject json,GraphResponse响应){
if(response.getError()!=null){
//处理错误
System.out.println(“ERROR”+response.getError().toString());
}否则{
//System.out.println(“成功”);
String jsonresult=String.valueOf(json);
System.out.println(“JSON结果”+jsonresult);
String resp=String.valueOf(response.getJSONObject());
System.out.println(“JSON resp”+resp);
}
}
});
gr.setParameters(参数);
gr.executeAsync();
}
@凌驾
公开作废{
txtStatus.setText(“已取消”);
}
@凌驾
public void onError(facebook异常错误){
setText(“Error”+Error.getMessage());
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}
尝试添加:

loginButton.setReadPermissions("email");
初始化登录按钮后


还可以看一下:“如果你的应用程序要求的数据超过了公开的个人资料、电子邮件和用户朋友,那么你的应用程序需要经过Facebook的审核才能被应用程序开发人员以外的人使用。”这意味着当你需要的数据超过公开的数据而不是上述数据时,我必须应用
loginButton.registerCallback(callbackManager,new FacebookCallback()
?您需要更改
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()
),而不是Gavin Harris提到的
LoginManager.getInstance())
进入
loginButton
setReadPermissions
,例如
loginButton.setReadPermissions(Arrays.asList(“公共档案”、“电子邮件”、“用户生日”、“用户朋友”));
不,我认为您可以使用:
来响应登录结果,您需要向LoginManager或LoginButton注册回调。
()