Rishabh Lashkari
Rishabh Lashkari

Reputation: 638

DefaultHttpClient deprecated

I had spend a lot of my time following this tutorial: http://www.mybringback.com/android-sdk/13239/android-mysql-php-json-part-6-json-parsing-and-android-design/

but then i realized that DefaultHttpClient along with namevaluepair is depreciated..

i was wondering if i can find an alternative to this code.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.ContentValues;
import android.util.Log;
import android.widget.Toast;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
            ContentValues params) {

        // Making HTTP request
        try {

            // check for request method
            if(method == "POST"){
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            }
            else if(method == "GET"){
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

            Log.e("JSON Parser", sb.toString());

        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

Upvotes: 0

Views: 12123

Answers (4)

IntelliJ Amiya
IntelliJ Amiya

Reputation: 75788

What should you do

Use this

HttpClient client = HttpClientBuilder.create().build();

DEMO EXAMPLE

    HttpClient client = HttpClientBuilder.create().build();
    HttpGet request = new HttpGet("URL");
    HttpResponse response = client.execute(request);

Read HttpClientBuilder.

Edit

You can try with HttpURLConnection.

DEMO

URL url = new URL("http://www.android.com/");
   HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
   try {
     InputStream in = new BufferedInputStream(urlConnection.getInputStream());
     readStream(in);
   } finally {
     urlConnection.disconnect();
   }

Upvotes: 2

Egos Zhang
Egos Zhang

Reputation: 1364

You can use HttpURLConnection or the open source Volley

Upvotes: 2

Kaveesh Kanwal
Kaveesh Kanwal

Reputation: 1773

What you are doing is the thing of the past. Move on to google's own volley library to make network calls. It is super easy and you do not require AsyncTask anymore.

Just download the library from here and then import it as a module in your project. Simple.

Note: there is also a GsonRequest class in this library and it will set your model class with the data that you are getting. You do not even have to any parsing, so it saves a lot of time.

Upvotes: 2

DreadfulWeather
DreadfulWeather

Reputation: 738

In documents of apache it says use HttpClientBuilder instead you can check from link below

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html

Upvotes: 0

Related Questions