title: publish on wall with Facebook sdk 3.0 and Android
body: <p>I've read lots of tutorial and answers here, but i'm not capable to implement a button  that clicked , publish some text on the wall (with a login done programmatically). I tried with a fragment and two buttons, but this code launches a</p>
  
  <pre><code>05-14 09:26:32.548: E/AndroidRuntime(5080): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
  </code></pre>
  
  <p>the code is:</p>
  
  <pre><code>private static final List&lt;String&gt; PERMISSIONS = Arrays.asList("publish_actions");
  private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization";
  private boolean pendingPublishReauthorization = false;
  private static final String TAG = "MainFragment";
  private static final String PUBLISH_ACTIONS_PERMISSION = null;
  private UiLifecycleHelper uiHelper;
  private LoginButton login;
  private Button shareButton;
  
  
  private Session.StatusCallback callback = new Session.StatusCallback() {
      @Override
      public void call(Session session, SessionState state, Exception exception) {
          onSessionStateChange(session, state, exception);
      }
  };
  
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
      View view = inflater.inflate(R.layout.facebook_fragment, container, false);
  
      shareButton = (Button) view.findViewById(R.id.shareButton);
      login=(LoginButton)view.findViewById(R.id.loginButton);
      login.setPublishPermissions(PERMISSIONS);
  
      if (savedInstanceState != null) {
          pendingPublishReauthorization = 
              savedInstanceState.getBoolean(PENDING_PUBLISH_KEY, false);
      }
      shareButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              publishStory();        
          }
      });
      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 &amp;&amp;
              (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()) {
          Log.i(TAG, "Logged in...");
      } else if (state.isClosed()) {
          Log.i(TAG, "Logged out...");
      }
      if (pendingPublishReauthorization &amp;&amp; 
              state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
          pendingPublishReauthorization = false;
          publishStory();
      }
  }
  
  private void publishStory() {
      Session session = Session.getActiveSession();
  
      if (session != null){
  
          // Check for publish permissions    
          List&lt;String&gt; permissions = session.getPermissions();
          if (!isSubsetOf(PERMISSIONS, permissions)) {
  
              pendingPublishReauthorization = true;
              Session.NewPermissionsRequest newPermissionsRequest = new Session
                      .NewPermissionsRequest(this, PERMISSIONS);
              session.requestNewPublishPermissions(newPermissionsRequest);
              return;
          }
  
          Bundle postParams = new Bundle();
          postParams.putString("name", "Facebook SDK for Android");
                  postParams.putString("caption", "Build great social apps and get more installs.");
                  postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
                  postParams.putString("link", "https://developers.facebook.com/android");
  
                  Request.Callback callback= new Request.Callback() {
                      public void onCompleted(Response response) {
                          JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
                          String postId = null;
                          try {
                              postId = graphResponse.getString("id");
                          } catch (JSONException e) {
                              Log.i(TAG,"JSON error "+ e.getMessage());
                          }
                          FacebookRequestError error = response.getError();
                          if (error != null) {
                              Toast.makeText(getActivity().getApplicationContext(),error.getErrorMessage(),Toast.LENGTH_SHORT).show();
                          } else {
                              Toast.makeText(getActivity().getApplicationContext(), postId,Toast.LENGTH_LONG).show();
                          }
                      }
                  };
  
                  Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);
  
                  RequestAsyncTask task = new RequestAsyncTask(request);
                  task.execute();
      }
  
  }
  private boolean isSubsetOf(Collection&lt;String&gt; subset, Collection&lt;String&gt; superset) {
      for (String string : subset) {
          if (!superset.contains(string)) {
              return false;
          }
      }
      return true;
      }
  }
  </code></pre>
  
  <p>where's the problem? i'm going crazy! Thanks very  much!</p>