2013-02-24 74 views
2

我正在將facebook整合到我的android應用程序中,當用戶第一次登錄時,我正在使用我的requestFacebookPermissions(session)方法請求publish_actions權限。但每當我把這種方法它給了我下面的例外...Facebook android sdk的Session.requestNewPublishPermissions給出了一個例外

java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request. 

我沒有任何其他請求掛起,可能是一些其他的內部要求,但我如何請求權限沒有得到這個例外?如果我必須等到其他請求完成纔可以,但我不知道如何確定待處理的請求是否已完成。

private void requestFacebookPermissions(Session session) { 

     if (session != null && session.getState().isOpened()) { 
      List<String> permissions = session.getPermissions(); 

      Log.i("Facebook", "Permissions Count: " + permissions.size()); 

      for (String string : permissions) { 
       Log.i("FacebookPermissions", string); 
      } 

      if (!permissions.containsAll(PERMISSIONS)) { 
       try { 
        session.requestNewPublishPermissions(new Session.NewPermissionsRequest(FacebookActivity.this, PERMISSIONS)); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     } else { 
      return; 
     } 
    } 
+0

你好,你有沒有解決這個問題?我有同樣的問題。 – 2014-01-14 19:17:46

回答

1

我要求出版許可後登錄

這是我的代碼

public class FacebookAccount extends FragmentActivity { 
    private UserSettingsFragment userSettingsFragment; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.facebook_login); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     userSettingsFragment = (UserSettingsFragment) fragmentManager 
       .findFragmentById(R.id.login_fragment); 

     userSettingsFragment.setReadPermissions(Utility.READ_PERMISSIONS); 

     userSettingsFragment 
       .setSessionStatusCallback(new Session.StatusCallback() { 
        @Override 
        public void call(Session session, SessionState state, 
          Exception exception) { 
         if (state == SessionState.OPENED 
           && !session.getPermissions().containsAll(
             Utility.PUBLISH_PERMISSIONS)) { 
          session.requestNewPublishPermissions(new Session.NewPermissionsRequest(
            FacebookAccount.this, 
            Utility.PUBLISH_PERMISSIONS)); 
         } 
         if (session.isOpened() 
           && state == SessionState.OPENED_TOKEN_UPDATED) { 
          ....Save session access token 
         } 
        } 
       }); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (userSettingsFragment != null) 
      userSettingsFragment 
        .onActivityResult(requestCode, resultCode, data); 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

}