如何从Android Facebook SDK 4.6.0获取电子邮件id?

如何从Android Facebook SDK 4.6.0获取电子邮件id?,android,facebook,graph,Android,Facebook,Graph,这是我登录facebook后获取用户信息的代码。 我正在尝试从用户那里获取emailid。我正在获取名称、id,但没有获取emailid。我尝试了Login按钮和Login Manager类,两者都给出了相同的结果。 现在,如何从响应中获取电子邮件id: loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override

这是我登录facebook后获取用户信息的代码。 我正在尝试从用户那里获取emailid。我正在获取名称、id,但没有获取emailid。我尝试了Login按钮和Login Manager类,两者都给出了相同的结果。 现在,如何从响应中获取电子邮件id:

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(final LoginResult loginResult) {
                    new GraphRequest(AccessToken.getCurrentAccessToken(),
                            "/me", null , HttpMethod.GET,
                            new GraphRequest.Callback() {
                                public void onCompleted(
                                        GraphResponse response) {
                                         handle the result 

                                    if (response !=null  )
                                    {
                                        //GET USER INFORMATION
                                        Toast.makeText(getApplicationContext(),"Hello in JSON",Toast.LENGTH_LONG).show();
                                        JSONObject json = response.getJSONObject();
                                        //JSONArray jsona = response.getJSONArray();
                                        Log.i(TAG,"" +json);
                                       // Log.i(TAG,"" +json);
                                        String email = json.optString("email");
                                       // String email = json.optString("email");
                                        //Log.i("email", "" + email);
                                        Log.i(TAG,"" +email);
                                        String fullName = json.optString("name");
                                        String location = json.optString("location");
                                        String accessToken = loginResult.getAccessToken().getToken();
                                        String user_id = json.optString("id");
                                        Log.i(TAG,"" +json);
                                        Toast.makeText(getApplicationContext(),fullName,Toast.LENGTH_LONG).show();
                                        Toast.makeText(getApplicationContext(),email,Toast.LENGTH_LONG).show();
                                        Toast.makeText(getApplicationContext(),user_id,Toast.LENGTH_LONG).show();
                                        //int type = 1;
                                       // String lastUpdate = json.getString("updated_time");

                                      //  Log.i("email", "" + email);
                                      //  Log.i("Message", "HELLO");
                                        Log.i("Name", "" + fullName);
                                        Log.i("ID", "" + user_id);


                                    }
                                }

                            }).executeAsync();

谢谢

从Graph API v2.4开始,您需要指定要在查询中返回的每个字段

new GraphRequest(AccessToken.getCurrentAccessToken(),
  "/me", null , HttpMethod.GET,
  new GraphRequest.Callback() {
    ...
需要成为

new GraphRequest(AccessToken.getCurrentAccessToken(),
  "/me?fields=id,name,email", null , HttpMethod.GET,
  new GraphRequest.Callback() {
    ...
这是一个很好的记录,这里有几十个类似的问题。在发布问题之前,请先参考文档

请记住,您需要适当的权限才能请求用户详细信息。在这种情况下,它是电子邮件

见:


这是获得Facebook全部登录信息的方法

    locationMangaer = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    loginButton = (LoginButton)findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList("email", "user_photos", "public_profile", "user_friends"));

    callbackManager= CallbackManager.Factory.create();
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            // Application code
                            Log.e("LoginActivity", response.toString() + "    " + object.toString());

                            try {
                                String name=object.getString("name");
                                String email=object.getString("email");
                                String id=object.getString("id");
                                String gender=object.getString("gender");




                                Log.e("LoginActivity", name + "    " + email + "   " + id + "   " + gender);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    });



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

        }

        @Override
        public void onCancel() {
            // App code
            Log.e("LOGIN Cancle", "LOGIN Cancle");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.e("LOGIN Cancle", exception.getMessage());
        }
    });

请您添加更多关于您陷入困境的信息好吗?@AndiGeeky Hii我正在使用Facebook sdk 4.6.0和API版本2.5我在上面的代码中我正在使用json对象获取名称、id,但没有获取电子邮件id。请添加任何suugestion?。调试您的应用程序并检查GraphResponse响应中的内容。。!!我在Graphresponse response{response:responseCode:200,graphObject:{id:97146928899927,name:Siddharth Choudhary},error:null}上一封邮件为null,显示错误!!您是否使用与开发人员帐户相同的帐户登录?使用上述代码,从Facebook帐户检索电子邮件id您的代码对我有效。谢谢您的帖子。。!!但是怎么做??Bundle参数=新Bundle;parameters.putStringfields、id、姓名、链接、生日、图片、电子邮件、性别;request.setParameters参数表;request.executeAsync;它是如何执行的,因为这里我需要将它传递给另一个变量?我可以知道你需要传递给另一个变量的值吗?我需要传递id,fname,lname,电子邮件和手机号码,但我已经了解到API版本中不允许使用手机号码。我将代码替换为您的代码,但其输出仍然相同。没有更改。是否需要更改其他内容。?您是否获得电子邮件权限?我已在上面的登录管理器中授予了权限。!!是的,我得到了电子邮件许可。。!!!!电子邮件返回空。。LoginManager.getInstance.logInWithReadPermissionsfacebooklogin.this,Arrays.AsListMail;
    locationMangaer = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    loginButton = (LoginButton)findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList("email", "user_photos", "public_profile", "user_friends"));

    callbackManager= CallbackManager.Factory.create();
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(
                                JSONObject object,
                                GraphResponse response) {
                            // Application code
                            Log.e("LoginActivity", response.toString() + "    " + object.toString());

                            try {
                                String name=object.getString("name");
                                String email=object.getString("email");
                                String id=object.getString("id");
                                String gender=object.getString("gender");




                                Log.e("LoginActivity", name + "    " + email + "   " + id + "   " + gender);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                        }
                    });



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

        }

        @Override
        public void onCancel() {
            // App code
            Log.e("LOGIN Cancle", "LOGIN Cancle");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.e("LOGIN Cancle", exception.getMessage());
        }
    });