2017-04-30 33 views
0

所以這裏的Android的Facebook解析登錄邏輯是代碼叫了兩聲

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); 
} 

}

,一切工作正常,用戶被重定向到第二個活動,但活動被調用兩次。另外,舊的日誌部分也在logcat中寫入兩次,所以我的假設是parseLogin()或ParseFacebookUtils.log ...()被調用兩次。任何想法爲什麼會發生?

+0

嘗試刪除'ParseFacebookUtils.onActivityResult(requestCode,resultCode,data);'... – rafsanahmad007

+0

是的,它的工作原理。謝謝! – ubuntuaskdanidani

+0

我已將其添加爲答案........ – rafsanahmad007

回答

0

我設法通過添加一個只執行一次代碼的int和while循環來修復它。這不僅僅是一個修補程序,也許有人會想出更好的解決方案。