简体   繁体   English

Android Facebook sdk 4.2无法收到电子邮件

[英]Android Facebook sdk 4.2 cannot get email

I am using facebook sdk 4.2 for my android app. 我使用facebook sdk 4.2为我的Android应用程序。 But I was unable to get the my email and it show no value for email. 但我无法收到我的电子邮件,因此没有显示电子邮件的价值。 However, I can get other value such as name, link, id, gender. 但是,我可以获得其他价值,如姓名,链接,身份证,性别。 There are some topic about this from stackoverflow but they are using the older sdk version, the class is different. stackoverflow有一些关于这个的话题,但他们使用的是较旧的sdk版本,这个类是不同的。 Please help, here is my code. 请帮忙,这是我的代码。

FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();

LoginManager.getInstance().registerCallback(callbackManager,
  new FacebookCallback < LoginResult > () {
   @Override
    public void onSuccess(LoginResult loginResult) {

      Toast.makeText(MainActivity.this, "SUCCESS", Toast.LENGTH_SHORT).show();

      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(),
        new GraphRequest.GraphJSONObjectCallback() {
        @Override
          public void onCompleted(
            JSONObject object,
            GraphResponse response) {
            // Application code 
            try {
              String id = object.getString("id");
              String name = object.getString("name");

              String email = object.getString("email"); //Get null value here

              String gender = object.getString("gender");

              Toast.makeText(MainActivity.this, "HI," + name + "Gender: " + gender, Toast.LENGTH_SHORT).show();

            } catch (JSONException e) {
              Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
              e.printStackTrace(); 

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

    @Override
    public void onCancel() {
      // App code
    }

    @Override
    public void onError(FacebookException exception) {
      // App code   
    }
  });
@Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   callbackManager.onActivityResult(requestCode, resultCode, data);
 }

My log file 我的日志文件

06-05 13:47:56.207: W/System.err(9965): org.json.JSONException: No value for email 06-05 13:47:56.246: W/System.err(9965): at org.json.JSONObject.get(JSONObject.java:355) 06-05 13:47:56.246: W/System.err(9965): at org.json.JSONObject.getString(JSONObject.java:515) 06-05 13:47:56.254: W/System.err(9965): at com.android.jobstreet.MainActivity$2$1.onCompleted(MainActivity.java:242) 06-05 13:47:56.254: W/System.err(9965): at com.facebook.GraphRequest$1.onCompleted(GraphRequest.java:295) 06-05 13:47:56.254: W/System.err(9965): at com.facebook.GraphRequest$5.run(GraphRequest.java:1243) 06-05 13:47:56.254: W/System.err(9965): at android.os.Handler.handleCallback(Handler.java:733) 06-05 13:47:56.254: W/System.err(9965): at android.os.Handler.dispatchMessage(Handler.java:95) 06-05 13:47:56.254: W/System.err(9965): at android.os.Looper.loop(Looper.java:136) 06-05 13:47:56.254: W/System.err(9965): at android.app.ActivityThread.main(ActivityThread.java:5146) 06-05 13:47:56.254: W/System.err(9965): 06-05 13:47:56.207:W / System.err(9965):org.json.JSONException:没有电子邮件的值06-05 13:47:56.246:W / System.err(9965):at org.json .JSONObject.get(JSONObject.java:355)06-05 13:47:56.246:W / System.err(9965):at org.json.JSONObject.getString(JSONObject.java:515)06-05 13:47 :56.254:W / System.err(9965):at com.android.jobstreet.MainActivity $ 2 $ 1.onCompleted(MainActivity.java:242)06-05 13:47:56.254:W / System.err(9965):at com.facebook.GraphRequest $ 1.onCompleted(GraphRequest.java:295)06-05 13:47:56.254:W / System.err(9965):at com.facebook.GraphRequest $ 5.run(GraphRequest.java:1243)06 -05 13:47:56.254:W / System.err(9965):在android.os.Handler.handleCallback(Handler.java:733)06-05 13:47:56.254:W / System.err(9965):在android.os.Handler.dispatchMessage(Handler.java:95)06-05 13:47:56.254:W / System.err(9965):在android.os.Looper.loop(Looper.java:136)06- 05 13:47:56.254:W / System.err(9965):在android.app.ActivityThread.main(ActivityThread.java:5146)06-05 13:47:56.254:W / System.err(9965): at java.lang.reflect.Method.invokeNative(Native Method) 06-05 13:47:56.254: W/System.err(9965): at java.lang.reflect.Method.invoke(Method.java:515) 06-05 13:47:56.254: W/System.err(9965): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732) 06-05 13:47:56.254: W/System.err(9965): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566) 06-05 13:47:56.254: W/System.err(9965): at dalvik.system.NativeStart.main(Native Method) at java.lang.reflect.Method.invokeNative(Native Method)06-05 13:47:56.254:W / System.err(9965):at java.lang.reflect.Method.invoke(Method.java:515)06 -05 13:47:56.254:W / System.err(9965):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:732)06-05 13:47:56.254:W / System .err(9965):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)06-05 13:47:56.254:W / System.err(9965):at dalvik.system.NativeStart。 main(原生方法)

您必须设置以下权限

loginbtn.setReadPermissions("email");

You must request the "email" permission when you log the user in. Even if your app has the email permission, it will not always return an email address, so your app should not rely on that field always having a value. 当您登录用户时,您必须请求“电子邮件”权限。即使您的应用程序具有电子邮件权限,它也不会始终返回电子邮件地址,因此您的应用程序不应该依赖于始终具有值的该字段。

More information from the Facebook documentation . 来自Facebook 文档的更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM