Android Facebook解析登录逻辑调用两次
这是代码Android Facebook解析登录逻辑调用两次,android,facebook-android-sdk,Android,Facebook Android Sdk,这是代码 public void redirectToMain(){ Intent intent = new Intent(getApplicationContext(), MainScreen.class); startActivity(intent); finish(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstance
public void redirectToMain(){
Intent intent = new Intent(getApplicationContext(), MainScreen.class);
startActivity(intent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pers.clear();
pers.add("user_friends");
pers.add("email");
if (ParseUser.getCurrentUser() != null) {
redirectToMain();
}
loginButton = (LoginButton) findViewById(R.id.login_button);
callbackManager = CallbackManager.Factory.create();
loginButton.setReadPermissions("email", "user_friends");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
parseLogin();
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
}
public void parseLogin(){
loginButton.setVisibility(View.INVISIBLE);
ParseFacebookUtils.logInWithReadPermissionsInBackground(this, pers, new LogInCallback() {
@Override
public void done(ParseUser user, ParseException e) {
if(user==null){
Log.i("Cancel", "facebook");
}else if(user.isNew()){
Log.i("Parse", "succcess");
redirectToMain();
}
else{
Log.i("Parse", "old");
redirectToMain();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data );
ParseFacebookUtils.onActivityResult(requestCode,resultCode,data);
}
public-void-redirectomain(){
Intent Intent=新的Intent(getApplicationContext(),MainScreen.class);
星触觉(意向);
完成();
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pers.clear();
添加(“用户朋友”);
添加(“电子邮件”);
if(ParseUser.getCurrentUser()!=null){
番茄红素();
}
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
callbackManager=callbackManager.Factory.create();
setReadPermissions(“电子邮件”、“用户朋友”);
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
parseLogin();
}
@凌驾
公开作废{
//应用程序代码
}
@凌驾
public void onError(facebook异常){
//应用程序代码
}
});
}
public void parseLogin(){
设置可见性(视图不可见);
ParseFacebookUtils.logInWithReadPermissionsInBackground(这个,pers,new LogInCallback(){
@凌驾
公共无效完成(ParseUser用户,parsee异常){
if(user==null){
Log.i(“取消”、“facebook”);
}else if(user.isNew()){
Log.i(“解析”、“成功”);
番茄红素();
}
否则{
Log.i(“解析”、“旧”);
番茄红素();
}
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
ParseFacebookUtils.onActivityResult(请求代码、结果代码、数据);
}
}
一切正常,用户被重定向到第二个活动,但该活动被调用了两次。另外,表示old的日志部分也在logcat中写入了两次,因此我的假设是parseLogin()或ParseFacebookUtils.log…()被调用了两次。知道为什么会这样吗?我通过添加一个int和一个while循环来修复它,该循环只执行代码一次。这与其说是修复,不如说是黑客,所以也许有人能想出更好的解决方案。尝试删除
ParseFacebookUtils.onActivityResult(requestCode、resultCode、data)代码>…是的,它可以工作。非常感谢。我已经添加了它作为一个答案……。经过更多的测试,我发现这个解决方案不起作用,因为parse需要那一行来登录。否则它会给出一个错误“当另一个应用程序正在注销时无法登录”。请删除您的答案。@Ubuntuaskdani您找到正确的解决方案了吗?