Facebook registerCallBack方法未启动

时间:2016-05-03 16:27:38

标签: android facebook android-studio callback

我正在使用以下代码通过我的Android应用程序获取Facebook用户详细信息。

 callbackManager = CallbackManager.Factory.create();

 fb = (Button) findViewById(R.id.fb);
 loginButton = (LoginButton) findViewById(R.id.login_button);

  List < String > permissionNeeds = Arrays.asList("user_photos", "email",
   "user_birthday", "public_profile", "AccessToken");
  loginButton.registerCallback(callbackManager,
  new FacebookCallback < LoginResult > () {@Override
      public void onSuccess(LoginResult loginResult) {

    System.out.println("onSuccess");

    String accessToken = loginResult.getAccessToken()
        .getToken();
    Log.i("accessToken", accessToken);

    GraphRequest request = GraphRequest.newMeRequest(
    loginResult.getAccessToken(),
    new GraphRequest.GraphJSONObjectCallback() {@Override
        public void onCompleted(JSONObject object,
        GraphResponse response) {

            Log.i("LoginActivity",
            response.toString());
            try {
                id = object.getString("id");
                try {

                    Log.i("profile_pic",
                    profile_pic + "");

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
                name = object.getString("name");
                email = object.getString("email");
                gender = object.getString("gender");
                birthday = object.getString("birthday");
            } 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() {
    System.out.println("onCancel");
}

@Override
public void onError(FacebookException exception) {
    System.out.println("onError");
    Log.v("LoginActivity", exception.getCause().toString());
}
   });


@Override
protected void onActivityResult
  (int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
    Log.i("onActivityResult", "onActivityResult");
}

此处打印onActivityResult内的日志,而loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()完全没有启动。此方法中的所有日志均未打印。 有什么问题?

3 个答案:

答案 0 :(得分:3)

我通过放置

解决了这个问题
callbackManager = CallbackManager.Factory.create();

在setContentView();

之上

答案 1 :(得分:1)

检查您是否初始化了Fb SDK,如果不使用它。 创建一个从Application扩展的类,然后您必须在Android Manifiest中注册为Name。

public class App extends Application {
    public static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = this;
        FacebookSdk.sdkInitialize(getApplicationContext());

    }
    public static Context getContext() {
        return context;
    }

}

Manifiest。

<application
    android:name=".App" 
  .....
.....
.....

答案 2 :(得分:0)

您需要使用LoginManager.getInstance()进行回调,而不是对按钮进行回调,而是回调您要进行回调的页面。由于LoginManager.getInstance()是登录管理器的getter并返回登录管理器。

简而言之,只需应用代码:

LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>(){

而不是

loginButton.registerCallback(callbackManager,new FacebookCallback<LoginResult>(){