Android facebook的登录按钮

Android facebook的登录按钮,android,facebook,login,facebook-login,Android,Facebook,Login,Facebook Login,我正在使用facebook小部件的LoginButton通过facebook登录 mLoginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LoginManager.getInstance().logInWithReadPermissions(MainActivity.th

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

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

             LoginManager.getInstance().logInWithReadPermissions(MainActivity.this,Arrays.asList("public_profile", "user_friends"));
            }
        });
我有两个问题-

1.当我点击“登录”按钮时,facebook登录对话框会打开两次。因此,在我提供用户电子邮件和密码后首次登录后,它会显示另一个登录对话框,我必须关闭该对话框

2.在我登录并移动到下一个屏幕后,如果我返回到登录屏幕,它会在登录按钮中显示注销文本,这很理想。但当我单击它时,它会打开登录和注销对话框。理想情况下,它应该只打开注销对话框。我应该如何防止
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this、Arrays.asList(“public_profile”、“user_friends”);
如果用户已经登录,则不会执行

下面是我正在使用的代码

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);
    }
}
public类MainActivity扩展了AppCompatActivity{
私人登录按钮mLoginButton;
CallbackManager CallbackManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
callbackManager=callbackManager.Factory.create();
//Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
//设置支持操作栏(工具栏);
mLoginButton=(LoginButton)findviewbyd(R.id.login_按钮);
mLoginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AccessToken AccessToken=AccessToken.getCurrentAccessToken();
if(accessToken==null){
LoginManager.getInstance().logInWithReadPermissions(MainActivity.this、Arrays.asList(“public\u profile”、“user\u friends”);
}
}
});
mLoginButton.registerCallback(回调管理器,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常){
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}

在登录按钮上删除setOnClickListener,只需在登录按钮上注册Callback,它就能处理所有问题,登录按钮不需要setOnClickListener。它会被调用两次,因为您同时设置了setOnClickListener和RegisterCallBack

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) {

      }
     });

你能检查一个错误,它没有被调用吗?它正在被调用。问题是当我点击登录按钮时,facebook登录对话框会打开两次。因此,在我提供用户电子邮件和密码后首次登录后,它会显示另一个登录对话框,我必须关闭该对话框。另一个问题是我应该如何阻止LoginManager.getI如果用户已登录并单击注销按钮,则不会执行nstance().LOGINWITHREADPERCESSIONS(MainActivity.this,Arrays.asList(“public_profile”,“user_friends”);如果用户已登录并单击注销按钮,则不会执行该命令
AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if (accessToken != null) {
        }
        return accessToken != null;