How to add parameters to HttpURLConnection using POST using NameValuePair How to add parameters to HttpURLConnection using POST using NameValuePair android android

How to add parameters to HttpURLConnection using POST using NameValuePair


You can get output stream for the connection and write the parameter query string to it.

URL url = new URL("http://yoururl.com");HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setReadTimeout(10000);conn.setConnectTimeout(15000);conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("firstParam", paramValue1));params.add(new BasicNameValuePair("secondParam", paramValue2));params.add(new BasicNameValuePair("thirdParam", paramValue3));OutputStream os = conn.getOutputStream();BufferedWriter writer = new BufferedWriter(        new OutputStreamWriter(os, "UTF-8"));writer.write(getQuery(params));writer.flush();writer.close();os.close();conn.connect();

...

private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException{    StringBuilder result = new StringBuilder();    boolean first = true;    for (NameValuePair pair : params)    {        if (first)            first = false;        else            result.append("&");        result.append(URLEncoder.encode(pair.getName(), "UTF-8"));        result.append("=");        result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));    }    return result.toString();}


Since the NameValuePair is deprecated. Thought of sharing my code

public String  performPostCall(String requestURL,            HashMap<String, String> postDataParams) {        URL url;        String response = "";        try {            url = new URL(requestURL);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            conn.setReadTimeout(15000);            conn.setConnectTimeout(15000);            conn.setRequestMethod("POST");            conn.setDoInput(true);            conn.setDoOutput(true);            OutputStream os = conn.getOutputStream();            BufferedWriter writer = new BufferedWriter(                    new OutputStreamWriter(os, "UTF-8"));            writer.write(getPostDataString(postDataParams));            writer.flush();            writer.close();            os.close();            int responseCode=conn.getResponseCode();            if (responseCode == HttpsURLConnection.HTTP_OK) {                String line;                BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));                while ((line=br.readLine()) != null) {                    response+=line;                }            }            else {                response="";            }        } catch (Exception e) {            e.printStackTrace();        }        return response;    }

....

  private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException{        StringBuilder result = new StringBuilder();        boolean first = true;        for(Map.Entry<String, String> entry : params.entrySet()){            if (first)                first = false;            else                result.append("&");            result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));            result.append("=");            result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));        }        return result.toString();    }


If you don't need the ArrayList<NameValuePair> for parameters, this is a shorter solution that builds the query string using the Uri.Builder class:

URL url = new URL("http://yoururl.com");HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setReadTimeout(10000);conn.setConnectTimeout(15000);conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);Uri.Builder builder = new Uri.Builder()        .appendQueryParameter("firstParam", paramValue1)        .appendQueryParameter("secondParam", paramValue2)        .appendQueryParameter("thirdParam", paramValue3);String query = builder.build().getEncodedQuery();OutputStream os = conn.getOutputStream();BufferedWriter writer = new BufferedWriter(            new OutputStreamWriter(os, "UTF-8"));writer.write(query);writer.flush();writer.close();os.close();conn.connect();