2015-04-06 12 views
9

Error:(36, 20) error: cannot find symbol method registerCallback(CallbackManager,>)loginButton.registerCallback kann die Methode nicht lösen

Wenn ich dieses RegisterCallback von meiner Mainactivity zu facebook sdk 4.0's lib aufgerufen habe. Hier ist meine Klasse

public class MainActivity extends Activity { 
     TextView tv; 
     Button loginButton; 
     CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.e("Oncreate", "Now on On create"); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     tv =(TextView)findViewById(R.id.tv); 

     loginButton = (LoginButton)findViewById(R.id.login_button); 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       // App code 
      } 

      @Override 
      public void onCancel() { 
       // App code 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
      } 
     }); 

     LoginManager.getInstance().registerCallback(callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         // App code 
        } 

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

    } 
} 
+0

http://stackoverflow.com/questions/29294015/how-to-check-if-user- is-eingeloggt-mit-fb-sdk-4-0-for-android –

+0

Willkommen bei StackOverflow! Ich habe den Android-Teil des Titels entfernt, da dies ohnehin offensichtlich ist. –

+1

Überprüfen, ob jemand eine andere Antwort hier hat - ich habe das gleiche Problem, Android Studio sagt, dass "loginButton.registerCallback" kann nicht gelöst werden. – Chris

Antwort

7

loginButton muss Typ LoginButton statt Button.

Nicht verknüpft: Sie müssen den Rückruf nicht für loginButton und LoginManager.getInstance() registrieren. Ersteres ist für den loginButton Ablauf, letzteres wenn Sie Ihren eigenen Button oder Login-Trigger haben. In der Tat ist es nicht klar in der Dokumentation von Facebook, nicht deine Schuld.

10

Sie müssen FacebookSdk.sdkInitialize(this.getApplicationContext())vorsetContentView() anrufen. Beispielcode:

super.onCreate(savedInstanceState); 
FacebookSdk.sdkInitialize(this.getApplicationContext()); 
setContentView(R.layout.activity_login); 
callbackManager = CallbackManager.Factory.create(); 
loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button); 
//etc.. 

Auch die documentation erwähnt zu entweder Verwendung loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()oderLoginManager.getInstance().registerCallback (callbackManager, new FacebookCallback<LoginResult>(), nicht beide. Hier ist ein vollständiger Beispielcode:

private LoginButton loginButton; 
private CallbackManager callbackManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(this.getApplicationContext()); 
    setContentView(R.layout.activity_login); 
    callbackManager = CallbackManager.Factory.create(); 
    loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button); 
    List<String> permissionNeeds = Arrays.asList("user_photos", "email", "user_birthday", "public_profile"); 
    loginButton.setReadPermissions(permissionNeeds); 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
    { 
     @Override 
     public void onSuccess(LoginResult loginResult) 
     { 
      System.out.println("onSuccess"); 
     } 

     @Override 
     public void onCancel() 
     { 
      System.out.println("onCancel"); 
     } 

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

Vergessen Sie nicht, umfassen onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
Verwandte Themen