0

我在我的應用程序中發佈到Facebook粉絲頁面,但我收到錯誤,我無法弄清楚。Facebook Android:java.lang.UnsupportedOperationException:會話:嘗試請求新的待處理請求

的錯誤是:

java.lang.UnsupportedOperationException:會話:有人企圖 要求新的權限具有掛起的請求的會話。

我可以在我的牆上發佈數據,但是當我想在我的應用程序的Facebook粉絲頁上發佈數據時,我收到上述錯誤。
的代碼片段:

public class FacebookShareFragment extends Fragment { 

    private ProgressDialog progressDialog; 
    private UiLifecycleHelper uiHelper; 
    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions","manage_pages","publish_stream"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 

    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(final Session session, 
         final SessionState state, 
         final Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

@Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.facebook_share_fragment, container, false); 
     if (savedInstanceState != null) { 
      pendingPublishReauthorization = 
        savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false); 
     } 
shareOnFanPage(); 
return view; 
} 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(getActivity(), callback); 
     uiHelper.onCreate(savedInstanceState); 
    } 
@Override 
    public void onResume() { 
     super.onResume(); 
     Session session = Session.getActiveSession(); 
     if (session != null && 
       (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 

     uiHelper.onResume(); 
    } 

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization); 
     uiHelper.onSaveInstanceState(outState); 
    } 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) { 
      if (pendingPublishReauthorization && 
        state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
       pendingPublishReauthorization = false; 
     //   publishStory(); 
       shareOnFanPage(); 
      } 
     } else if (state.isClosed()) { 
     } 
    } 

    /** 
    * Method to publish on the fan page 
    */ 
    public void shareOnFanPage(){ 
     Session session = Session.getActiveSession(); 
     if (session != null) { 
      List<String> permissions = session.getPermissions(); 
      if (!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session 
         .NewPermissionsRequest(this, PERMISSIONS); 
       session.requestNewPublishPermissions(newPermissionsRequest); // AT THIS POINT I AM GETTING THE ERROR. 
       return; 
      } 

      // Show a progress dialog because the batch request could take a while. 
      progressDialog = ProgressDialog.show(getActivity(), "", 
        getActivity().getResources().getString(R.string.progress_dialog_text), true); 

      try { 
       final RequestBatch requestBatch = new RequestBatch(); 
       requestBatch.add(fbFan()); 
       requestBatch.executeAsync(); 
      }catch(Exception e){ 
        e.printStackTrace(); 
      } 
     } 
    } 

首先,我能夠進行張貼在我的FB牆壁上的數據,但後來根據要求我增加了新的權限「manage_pages」 &「publish_stream」,但不知道爲什麼即使當我評論在FB牆上發佈數據的publishStory()方法時,我也會收到錯誤。

我看了很多文章,但無法弄清楚......

回答

0

我相信onCreateView是onActivityResult之前調用。在這種情況下,如果您的主機活動在許可請求完成之前被殺死(或者如果您打開了「不保留活動」選項),則此方法將始終在onActivityResult之前被調用。

既然你也在你的onCreateView中調用shareOnFanPage,你基本上會在前一個完成之前做出另一個權限請求(因爲它在onActivityResult中完成,當你將它傳遞給uiLifecycleHelper時)。

我會將shareOnFanPage()調用移動到onResume,或者完全刪除它,因爲我不認爲你需要它,因爲你已經打算在你的onResume方法中調用SessionStateChanged。