title: Android - POST to RESTful Web Service
body: <p>I am looking for some guidance on how to post data to a web service in my Android application. Unfortunately this is a school project, so I'm not able to use external libraries.</p>
  
  <p>The web service has a base URL, for example:</p>
  
  <pre><code>http://example.com/service/create
  </code></pre>
  
  <p>And takes two variables, in the following format:</p>
  
  <pre><code>username = "user1"
  locationname = "location1"
  </code></pre>
  
  <p>The web service is RESTful and uses an XML structure, if that makes a difference. From my research I understand I should be using URLconnection rather than the deprecated HTTPconnection, but I cannot find an example of what I am looking for.</p>
  
  <p>Here is my attempt, which is currently not working:</p>
  
  <pre><code>import android.os.AsyncTask;
  import android.os.Bundle;
  import android.support.v7.app.AppCompatActivity;
  
  import java.io.BufferedOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.net.HttpURLConnection;
  import java.net.ProtocolException;
  import java.net.URL;
  
  public class MainActivity extends AppCompatActivity {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          toPost test = new toPost();
          text.execute();
      }
  
      private class toPost extends AsyncTask&lt;URL, Void, String&gt; {
          @Override
          protected String doInBackground(URL... params) {
              HttpURLConnection conn = null;
              try {
                  URL url = new URL("http://example.com/service");
                  conn = (HttpURLConnection) url.openConnection();
                  conn.setReadTimeout(10000);
                  conn.setConnectTimeout(15000);
                  conn.setRequestMethod("POST");
                  conn.setDoInput(true);
                  conn.setDoOutput(true);
                  String body = "username=user1&amp;locationname=location1";
                  OutputStream output = new BufferedOutputStream(conn.getOutputStream());
                  output.write(body.getBytes());
                  output.flush();
              } catch (ProtocolException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              } finally {
                  conn.disconnect();
              }
              return null;
          }
      }
  
  }
  </code></pre>