2016-04-09 40 views
1

我正在使用Facebook小部件的LoginButton通过Facebook登录。facebook的LoginButton

mLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends")); 
      } 
     }); 

我有两个issues-

1.当我点击登录按钮Facebook登录对话框打开两个times.So我提供用户电子邮件地址和密码登录后,在第一时间后,它显示了另一个登录对话框后面我必须关闭。

2.当我登录并移动到下一个屏幕后,如果我回到登录屏幕,它会在登录按钮中显示注销文本,这是理想的。但是当我点击它时,它会打开登录和注销对话框。它应该只是注销对话框box.How打开我应该阻止LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends"));从如果用户已经登录执行。

下面是他的代码我使用loginButton

public class MainActivity extends AppCompatActivity { 
private LoginButton mLoginButton; 
    CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_main); 
     callbackManager = CallbackManager.Factory.create(); 
//  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
//  setSupportActionBar(toolbar); 
     mLoginButton = (LoginButton) findViewById(R.id.login_button); 

     mLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
if(accessToken==null) { 
    LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends")); 

} 
      } 
     }); 
     mLoginButton.registerCallback(callbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 

        } 
        @Override 
        public void onCancel() { 
        } 
        @Override 
        public void onError(FacebookException exception) { 
        } 
       }); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
} 

回答

0

删除setOnClickListener,只是RegisterCallBack上登录按钮,它会处理所有的事情,你不需要为loginButton设置setOnClickListener。它被调用两次,因为你已经设置了setOnClickListener和registerCalBack。

CallbackManager callbackManager = CallbackManager.Factory.create(); 

loginButton = (LoginButton) findViewById(R.id.fbLogin); 
loginButton.setReadPermissions(Arrays.asList("user_status,public_profile,user_friends,email,user_birthday")); 
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(final LoginResult loginResult) { 

    } 

    @Override 
    public void onCancel() { 

     } 

    @Override 
     public void onError(FacebookException error) { 

     } 
    }); 

您可以检查,如果用户登录或不

AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     if (accessToken != null) { 
     } 
     return accessToken != null; 
+0

我已经这样做了 – user3751386

+0

你能否onError的检查,它不会被调用? –

+0

这是问题是当我点击登录按钮Facebook登录对话框打开两次。所以在我提供用户的电子邮件和密码后第一次登录后,它显示了我必须关闭的另一个登录对话框。 – user3751386

相关问题