FacebookCallback <loginresult>不执行所有代码-android

时间:2016-09-07 22:21:58

标签: android facebook-sdk-4.x



//代码

      callback = new FacebookCallback<LoginResult>() {
        Profile profile;
        @Override
        public void onSuccess(LoginResult loginResult) {
             profile = Profile.getCurrentProfile();
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {

                            // Application code
                            try {
                                email=object.getString("email");
                                login(email,profile.getId());

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "email");
            request.setParameters(parameters);
            request.executeAsync();

            nextActivity();
        }
        @Override
        public void onCancel() {
        }

        @Override
        public void onError(FacebookException e) {
        }
    };
public void login(String email,String password){
    editor.putBoolean("islogin",true);
    editor.putString("email", email);
    editor.putString("password",password);
    editor.commit();
}

我想从FacebookCallback收到电子邮件,但登录方法没有执行,当我尝试使用回调中的电子邮件(变量)时,我得到了电子邮件的第一个值?我怎么解决这个问题 !!谢谢

1 个答案:

答案 0 :(得分:0)

由于email变量不在代码段中,因此它必须来自嵌套匿名函数之外:new FacebookCallback<LoginResult>()new GraphRequest.GraphJSONObjectCallback()这意味着必须声明它final因此无法在您的代码中重置该值:email=object.getString("email");

您应该使用局部变量:

try {
  String userEmail =object.getString("email");
  login(userEmail,profile.getId());
}