22

The org.apache.http classes and the AndroidHttpClient class have been deprecated in Android 5.1. These classes are no longer being maintained and you should migrate any app code using these APIs to the URLConnection classes as soon as possible.

https://developer.android.com/about/versions/android-5.1.html#http

It has recommended to switch to URLConnection classes. There is not enough documented exactly how to make the post call from the app.

Currently i am using this

public void postData()
{
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");

    try
    {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair(2);
        nameValuePairs.add(new BasicNameValuePair("id", "12345"));
        nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
     } 
     catch (ClientProtocolException e) 
     {
        // TODO Auto-generated catch block
     } 
     catch (IOException e) 
     {
        // TODO Auto-generated catch block
     }
} 

How can i do it using UrlConnections?

Fahim
  • 11,496
  • 4
  • 36
  • 56
  • 2
    Do you mean something like this - http://stackoverflow.com/questions/9767952/how-to-add-parameters-to-httpurlconnection-using-post ? I recommend you to switch to Retrofit, aQuery or any other HTTP lib actually. – Stan Apr 09 '15 at 10:44
  • Have you checked the official docs? http://developer.android.com/reference/java/net/HttpURLConnection.html – random Apr 09 '15 at 10:55
  • @stan NameValuePair class is deprecated which is used in your shared link accepted answer – Fahim Apr 09 '15 at 11:25
  • Possible duplicate of http://stackoverflow.com/a/2793153/2413303 – EpicPandaForce Apr 09 '15 at 12:33

3 Answers3

32

Thought of sharing my code using HttpUrlConnection

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();
    }
elbuild
  • 4,787
  • 4
  • 21
  • 31
Fahim
  • 11,496
  • 4
  • 36
  • 56
3

What about using Volley? It seems like a very good choice over URLConnection. And it has a lot of benefits in queueing of the requests.

Array
  • 1,906
  • 21
  • 27
0

Use this httpmime-4.1-beta1.jar Try This Code:-

String url = "http://www.yoursite.com/script.php";
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpPost postMethod = new HttpPost(url);
MultipartEntity entity = new MultipartEntity();
try 
{
    entity.addPart("id", new StringBody("123"));
    entity.addPart("stringdata", new StringBody("AndDev is Cool!"));
    postMethod.setEntity(entity);
    HttpResponse response;
    response = client.execute(postMethod);
    String result = EntityUtils.toString(response.getEntity());
    JSONArray ja = new JSONArray(result);
    // ITERATE THROUGH AND RETRIEVE CLUB FIELDS
    int n = ja.length();
    for (int i = 0; i < n; i++) 
    {
      // GET INDIVIDUAL JSON OBJECT FROM JSON ARRAYJSONObject jo = ja.getJSONObject(i);
      // RETRIEVE EACH JSON OBJECT'S FIELDS
      String status = jo.getString("status");
      // Log.e("status",status);
    }
}
catch (Exception e)
{
   e.printStackTrace();
}
Arjun Prakash
  • 639
  • 8
  • 22
cyberlobe
  • 1,779
  • 1
  • 16
  • 30