2016-05-03 15 views
4

私はAndroidアプリケーションを通じてFacebookユーザーの詳細を取得するために次のコードを使用しています。ここでFacebook registerCallBackメソッドが開始されていません

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

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()が全く開始されていない一方で、onActivityResult内のログは、印刷されます。このメソッド内のログは何も出力されません。 問題は何ですか?

答えて

1

Fb SDKを初期化していないか確認してください。 Applicationから拡張されたクラスを作成すると、Androidマニフェストに名前として登録する必要があります。

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

} 

マニフェスト。

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

I)は、(setContentView上方

callbackManager = CallbackManager.Factory.create(); 

を配置することによってこの問題を解決します。

0

ボタンでコールバックを行うのではなく、LoginManager.getInstance()でコールバックする必要があります。コールバックを行うページにコールバックします。 as LoginManager.getInstance()はログインマネージャのゲッターであり、ログインマネージャを返します。

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

よりもむしろ

loginButton.registerCallback(callbackManager,new FacebookCallback<LoginResult>(){ 
:要するに

、ジャストコードを適用

関連する問題