Search code examples
androidjsonhttpurlconnection

How to send String using HttpURLConnection in android


I need to send a String to my Web Service and I have doubts about how to send string using HttpURLConnection.

Obs: in String "result" I have something like:

 {"sex":"Famale","nome":"Larissa Aparecida Nogueira","convenios":[{"convenio":2,"tipo":"Principal","number":"44551-1456-6678-3344"}],"user":"lari.ap","email":"[email protected]","cell":"(19)98167-5569"}

following is my code:

   public UsuerService(Context context, String result) {
       this.progressDialog = new ProgressDialog(context);
       this.context = context;
       this.result = result;
   }

  @Override
   protected String doInBackground(String... params) {

        String responseString = "";
        try {
             URL url = new URL(Constants.USUARIO + "/createUsuario");
             HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
             httpURLConnection.setRequestMethod("POST");


             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
             String inputLine;
             StringBuilder response = new StringBuilder();

             while ((inputLine = bufferedReader.readLine()) != null) {
             response.append(inputLine);
           }

            result = response.toString();
            bufferedReader.close();
           } catch (Exception e) {
            Log.d("InputStream", e.getMessage());
        }

         return null;
   }

I have a Class that picks up my data and parses it to JsonObject. I need to understand how to send my object.toString() for web service using HttpURLConnection.

following is the code:

 public String parserUsuarioJson(){

    JSONObject object = new JSONObject();

    try {
        object.put(Constants.KEY_NAME, mUsuario.getNome());
        object.put(Constants.KEY_EMAIL, mUsuario.getEmail());
        object.put(Constants.KEY_USER, mUsuario.getUser());
        object.put(Constants.KEY_PASS, mUsuario.getSenha());
        object.put(Constants.KEY_SEX, mUsuario.getSexo());
        object.put(Constants.KEY_CELLPHONE, mUsuario.getCelular());

        JSONArray array = new JSONArray();

        for(int i = 0; i < mUsuario.getUsuarioConvenios().size() ; i++){
            JSONObject convenio = new JSONObject();

            convenio.put(Constants.KEY_CONVENIO, mUsuario.getUsuarioConvenios().get(i).getConvenio().getId());
            convenio.put(Constants.KEY_NUMBER, mUsuario.getUsuarioConvenios().get(i).getNumero());
            convenio.put(Constants.KEY_TYPE, mUsuario.getUsuarioConvenios().get(i).getTipo());

            array.put(convenio);
        }
        object.put(Constants.KEY_CONVENIOS, array);
    } catch (JSONException e) {
        Log.e("Register", e.getMessage());
    }

    return object.toString();

}

Thanks in advance. :)


Solution

  • Use NameValuePairList to send the data.

    Try something like this...

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(Constants.USUARIO + "/createUsuario");
    
    try { 
            // Add your key-value pair here
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("sex", "female"));
            nameValuePairs.add(new BasicNameValuePair("nome", "Larissa Aparecida Nogueira"));
            // set all other key-value pairs
    
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    
            HttpResponse response = httpclient.execute(httppost);
    
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block 
        } catch (IOException e) {
            // TODO Auto-generated catch block 
        } 
    

    For Sending json Object over network using http post.

    pass the json string here

     StringEntity se = new StringEntity(object.toString());
     httpost.setEntity(se);
     httpost.setHeader("Accept", "application/json");
     httpost.setHeader("Content-type", "application/json");
     HttpResponse response = httpclient.execute(httpost);
    

    Don't forget to catch the exception.

    Sending json Object using httpurlConnection...

    try {
      //constants
      URL url = new URL(Constants.USUARIO + "/createUsuario");
      String yourJsonString = object.toString();
    
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("POST");
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setFixedLengthStreamingMode(yourJsonString.getBytes().length);
    
      conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
      conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");
    
      conn.connect();
    
      OutputStream os = new BufferedOutputStream(conn.getOutputStream());
      os.write(yourJsonString.getBytes());
    
      os.flush();
    
      InputStream is = conn.getInputStream();
    } finally {  
      //clean up
      os.close();
      is.close();
      conn.disconnect();
    }