2017-02-15 39 views
0

我在访问数据(例如电子邮件和出生日期)时遇到问题。在我看来,是有记号的东西,但我正在寻找的信息,我不能看到发生了什么事情on.Maybe有人会注意到一个错误或遇到了类似的Facebook SDK我只能访问公开数据

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

回答

1

尝试添加一些:

loginButton.setReadPermissions("email"); 

当您有initalised登录按钮。

https://developers.facebook.com/docs/facebook-login/android#addbutton

+0

也看看https://developers.facebook.com/docs/facebook-login/permissions/overview: “如果您的应用程序要求比超过public_profile,电子邮件越来越user_friends会需要通过Facebook进行审核,然后才能让应用程序开发人员以外的人使用您的应用程序。“ –

+0

这意味着当你需要比公共更多的数据而不是上面的时候,我必须应用'loginButton.registerCallback(callbackManager,new FacebookCallback ()'?而不是'LoginManager.getInstance()。registerCallback(callbackManager,new FacebookCallback ()' – programmerJavaPL

+1

由于Gavin Harris提到,您需要将LoginManager.getInstance()更改为loginButton和setReadPermissions,例如loginButton.setReadPermissions(Arrays.asList(“public_profile”,“email”, “user_birthday”,“user_friends”));' –