title: JSON Post To Rails From Android
body: <p>I'm currently working on an android app that interfaces with a Ruby on Rails app through XML and JSON.</p>
  
  <p>I can currently pull all my posts from my website through XML but I can't seem to post via JSON.</p>
  
  <p>My app currently builds a JSON object from a form that looks a little something like this: </p>
  
  <pre><code>{
      "post": {
          "other_param": "1", 
          "post_content": "Blah blah blah"
      }
  }
  </code></pre>
  
  <p>On my server I believe the Create method in my Posts Controller is set up correctly:
      def create
      @post = current_user.posts.build(params[:post])</p>
  
  <pre><code>respond_to do |format|
    if @post.save
      format.html { redirect_to @post, notice: 'Post was successfully created.' }
      format.json { render json: @post, status: :created, location: @post }
      format.xml { render xml: @post, status: :created, location: @post }
    else
      format.html { render action: "new" }
      format.json { render json: @post.errors, status: :unprocessable_entity }
      format.xml { render xml: @post.errors, status: :unprocessable_entity }
    end
   end
  end
  </code></pre>
  
  <p>And in my android app I have a method that takes that JSON Object I posted earlier as a parameter along with the username and password for being authenticated (Authentication is working I've tested it, and yes Simple HTTP authentication is probably not the best choice but its a quick and dirty fix) and it then sends the JSON Object through HTTP POST to the rails server. This is that method:</p>
  
  <pre><code>public static void sendPost(JSONObject post, String email, String password)
  {
      DefaultHttpClient client = new DefaultHttpClient();
      client.getCredentialsProvider().setCredentials(new AuthScope(null,-1), new UsernamePasswordCredentials(email,password));
      HttpPost httpPost = new HttpPost("http://mysite.com/posts");
      JSONObject holder = new JSONObject();
  
  
      try {   
          holder.put("post", post);
  
          StringEntity se = new StringEntity(holder.toString());
          Log.d("SendPostHTTP", holder.toString());
          httpPost.setEntity(se);
          httpPost.setHeader("Content-Type","application/json");
  
  
      } catch (UnsupportedEncodingException e) {
          Log.e("Error",""+e);
          e.printStackTrace();
      } catch (JSONException js) {
          js.printStackTrace();
      }
  
      HttpResponse response = null;
  
      try {
          response = client.execute(httpPost);
      } catch (ClientProtocolException e) {
          e.printStackTrace();
          Log.e("ClientProtocol",""+e);
      } catch (IOException e) {
          e.printStackTrace();
          Log.e("IO",""+e);
      }
  
      HttpEntity entity = response.getEntity();
  
      if (entity != null) {
          try {
              entity.consumeContent();
          } catch (IOException e) {
              Log.e("IO E",""+e);
              e.printStackTrace();
          }
      }
  
  }
  </code></pre>
  
  <p>Currently when I call this method and pass it the correct JSON Object it doesn't do anything and I have no clue why or how to figure out what is going wrong.</p>
  
  <p>Is my JSON still formatted wrong, does there really need to be that holder around the other data? Or do I need to use something other than HTTP POST? Or is this just something on the Rails end? A route or controller that isn't right?</p>
  
  <p>I'd be really grateful if someone could point me in the right direction, because I don't know where to go from here.</p>