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

时间:2015-06-05 05:50:31

标签: android facebook-graph-api facebook-sdk-4.0

我使用facebook sdk 4.2为我的Android应用程序。但我无法收到我的电子邮件,因此没有显示电子邮件的价值。但是,我可以获得其他价值,如姓名,链接,身份证,性别。 stackoverflow有一些关于这个的话题,但他们使用的是较旧的sdk版本,这个类是不同的。请帮忙,这是我的代码。

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);
 }

我的日志文件

  

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)

2 个答案:

答案 0 :(得分:6)

您必须设置以下权限

loginbtn.setReadPermissions("email");

答案 1 :(得分:0)

您必须在登录用户时请求“电子邮件”权限。即使您的应用具有电子邮件权限,也不会始终返回电子邮件地址,因此您的应用不应该依赖该字段始终具有值。

来自Facebook documentation的更多信息。