Android:Facebook登录/注销重叠?

时间:2018-02-05 13:55:38

标签: android facebook facebook-graph-api

所以我试图在我的Android应用程序上实现Facebook登录。

到目前为止,我认为它正在发挥作用。它登录。 所以,当我回到我的登录页面(仍然需要更新)时,我说“用facebook登录”的按钮,转到“退出”。

我按下它,但不是退出,而是再次登录。

这是我处理Facebook登录的代码

 var facebookLoginBtn = findViewById<Button>(R.id.loginFacebookBtn)


    facebookLoginBtn.setOnClickListener(View.OnClickListener {
        callBackManager = CallbackManager.Factory.create()
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
        LoginManager.getInstance().registerCallback(callBackManager,
                object : FacebookCallback<LoginResult> {
                    override fun onSuccess(loginResult: LoginResult) {
                        Log.d("LoginActivity", "Facebook Token: " + loginResult.accessToken.token)
                        startActivity(Intent(applicationContext, MainActivity::class.java))
                    }

                    override fun onCancel() {
                        Log.d("LoginActivity", "Facebook onCancel")
                    }

                    override fun onError(error: FacebookException?) {
                        Log.d("LoginActivity", "Facebook onError")
                    }
                })
    })




}

我尝试注销

 var btnLogout = findViewById<Button>(R.id.loginFacebookBtn)

    btnLogout.setOnClickListener(View.OnClickListener {
        if (AccessToken.getCurrentAccessToken() == null) {
            return@OnClickListener
        } else if (AccessToken.getCurrentAccessToken() != null) {
            GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/",
                    null, HttpMethod.DELETE, GraphRequest.Callback {
                LoginManager.getInstance().logOut()
            }
            ).executeAsync()


        }
    })

1 个答案:

答案 0 :(得分:0)

您正在为1个按钮分配2个事件处理程序。这可能导致两个事件处理程序都被执行。我还没有找到这方面的来源,但至少它符合您的退出和重新登录的描述。

由于您只使用一个按钮来登录和注销,为什么不使用相同的事件处理程序并使用一些if语句来确定要走哪条路?

facebookLoginBtn.setOnClickListener(View.OnClickListener {
    // Check if logged in
    if (loggedIn) {
        facebookLogOut();
    }
    else {
        facebookLogIn();
    }
});

loggedIn可能会被(AccessToken.getCurrentAccessToken() == null)替换,因为您在退出之前已经使用此功能进行检查。