2015-05-29 68 views
2

当我运行我的Android应用程序并单击批准以授予权限时,它不会重定向到MainActivity。 “登录”消息没有出现在Catlog中。我已阅读Facebook开发人员指南,并在Stack中将我的代码与不同的主题进行比较。我看不出我做错了什么。登录按钮facebook android不会重定向到新活动

我会很乐意的帮助。

public class Login extends Activity { 

/** 
* Called when the activity is first created. 
*/ 

    private CallbackManager callbackManager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    setContentView(R.layout.activity_login); 
    final CallbackManager callbackManager = CallbackManager.Factory.create(); 
    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("public_profile", "email", "user_friends"); 


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


     @Override 
     public void onSuccess(LoginResult loginResult) { 

      Intent i = new Intent(Login.this, MainActivity.class); 
      startActivity(i); 
      System.out.print("Logged in"); 

     } 

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

     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
      Log.i("Error" , "Error"); 
      } 


     }); 
    } 

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

} 

堆栈跟踪

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {org.MYapp.FBtestApp/org.MYapp.FBtestApp.Login}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3974) 
     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4017) 

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference 
     at org.MYapp.FBtestApp.Login.onActivityResult(Login.java:98) 
+0

当您仅提供代码时,很难为您提供帮助。 logcat中是否有错误?有参数是空的(特别是“resultCode”和“数据”)? –

+1

我建议你在问问题时不要*更新你的代码。现在接受的答案不再有意义。 – tir38

回答

5

对于登录工作,你必须从FacebookCallback anomymous类中删除onActivityResult()方法。 正确的代码应该是这样的:

所有的
private CallbackManager callbackManager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    callbackManager = CallbackManager.Factory.create(); 

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("public_profile", "email", "user_friends"); 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Intent i = new Intent(Login.this, MainActivity.class); 
      startActivity(i); 
      System.out.print("Logged in"); 
     } 

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

     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
      Log.i("Error" , "Error"); 
     } 
    }); 
} 

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

错误:无法解析符号callbackManager callbackManager.onActivityResult(requestCode,resultCode为,数据) } 编辑:错过了你在上面 – datasmurfen

+0

更新创建CallbackManager成员变量。看看我的代码,我已经编辑它(第1行和第9行)。 –

+0

你错过了我的代码。更改该行:final CallbackManager callbackManager = CallbackManager.Factory.create(); to:callbackManager = CallbackManager.Factory.create();另外不要忘记super.onActivityResult(requestCode,resultCode,data);在onActivityResult()中。 –

1

首先,将私人private CallbackManager callbackManager; 到你的代码。它应该是这个样子:

callbackManager = CallbackManager.Factory.create(); 
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 

然后加入FacebookSdk.sdkInitialize(getApplicationContext());

super.onCreate(savedInstanceState);

试试这个希望这个作品

+0

我没有想到这会工作,我不明白为什么这个工作后移动'super.onCreate(savedInstanceState);' – mes

0

以下为我工作:

补充:

FacebookSdk.sdkInitialize(getApplicationContext()); 

之前:这是奇怪

super.onCreate(savedInstanceState); 

,对一切都很好早期工作;但突然间,我有这个问题。现在,它解决了上述解决方案。