如何在android应用程序中从facebook sdk获取电子邮件id?

如何在android应用程序中从facebook sdk获取电子邮件id?,android,facebook-graph-api,Android,Facebook Graph Api,我在android应用程序中集成了Facebook登录。我想获取登录用户的电子邮件id。我怎样才能得到它 private void loginToFacebook() { Session.openActiveSession(this, true, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception

我在android应用程序中集成了Facebook登录。我想获取登录用户的电子邮件id。我怎样才能得到它

private void loginToFacebook() {
    Session.openActiveSession(this, true, new Session.StatusCallback() {

        @Override
        public void call(Session session, SessionState state, Exception exception) {
            if (session.isOpened()) {
                Log.i(TAG, "Access Token" + session.getAccessToken());
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            try {

                                 userID =user.getId();
                                 provider="facebook";
                                 userName=user.getUsername();
                                 firstName=user.getFirstName();
                                 lastName=user.getLastName();
                                 Log.d("****User****", "details:" + user);
                                 }catch(Exception e){

这是我的密码。我使用了
Request.GraphUserCallback()
方法,但该方法没有响应电子邮件。

试试这篇文章。希望你的问题能得到解决

顺便说一句,您需要使用
user.asMap().get(“email”).toString()用于接收用户电子邮件ID。

此外,您需要将其分配到一些标签中,如
lblEmail.setText
,其中lblEmail是一个文本视图。

在调用
Session.openActiveSession
之前,执行以下操作以获得权限添加以下内容:

List<String> permissions = new ArrayList<String>();
permissions.add("email");
将此方法添加到活动中:

private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback callback, List<String> permissions) {
    Session.OpenRequest openRequest = new Session.OpenRequest(activity).setPermissions(permissions).setCallback(callback);
    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;
}
private静态会话openActiveSession(活动活动、布尔allowLoginUI、Session.StatusCallback回调、列表权限){
Session.OpenRequest OpenRequest=新建Session.OpenRequest(活动).setPermissions(权限).setCallback(回调);
Session Session=新建Session.Builder(activity.build();
if(SessionState.CREATED_TOKEN_LOADED.equals(session.getState())| | allowLoginUI){
Session.setActiveSession(Session);
openForRead(openRequest);
返回会议;
}
返回null;
}

根据Egor N的建议,我更改了我的旧代码

Session.openActiveSession(this, true, statusCallback);
这个新的:

List<String> permissions = new ArrayList<String>();
permissions.add("email");
Session.openActiveSession(this, true, permissions, statusCallback);
List permissions=new ArrayList();
权限。添加(“电子邮件”);
openActiveSession(this,true,permissions,statusCallback);

现在FB询问用户关于电子邮件的权限,我可以在回复中阅读它

我用了简单的安卓按钮。那我怎么才能把许可放在那里。现在我只需要在那里输入电子邮件的权限。但我如何才能将权限和位置放置?@user2541633
loginbuttonauthbutton=(LoginButton)findViewById(R.id.authButton);authButton.setOneErrorListener(新的OneErrorListener(){authButton.setReadPermissions(Arrays.asList(“基本信息”、“电子邮件”))
这个东西在emulator上运行,但当我在手机上安装我的应用程序时,它直接指向facebook android应用程序,但没有给我任何响应显示您的代码和导致NullPointerException的确切行,以便我们可以为您提供。方法openActiveSession(Activity,boolean,Session.StatusCallback)类型中的Session不适用于参数(Login,boolean,new Session.StatusCallback(){},List)。这是eclipseit中显示的错误,它仍然给我相同的错误。删除参数说明资源路径位置类型方法openActiveSession(Activity,boolean,Session.StatusCallback)在类型中,Session不适用于参数(Login、boolean、new Session.StatusCallback(){}、List)Oops,my bad,请再次查看我的答案。注意,executeMeRequestAsync()现在已被弃用,但Session.openActiveSession()方法允许将权限包含为参数。
List<String> permissions = new ArrayList<String>();
permissions.add("email");
Session.openActiveSession(this, true, permissions, statusCallback);