Home » Android » java – org.apache.http packages removed in API level 23. What is the alternative?

java – org.apache.http packages removed in API level 23. What is the alternative?

Posted by: admin June 15, 2020 Leave a comment

Questions:

After adding following changes in by build.gradle right after updating to latest android API level 23 (Marshmallow) all org.apache.http classes is not working.

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.myapp.package"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 2
        versionName "1.1"
    }
}

I checked “Android API Differences Report” here. Its says all Classes of org.apache.http has been removed. Can someone suggest what is the alternative ?

Here is my code :

try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(address);

            httpPost.setEntity(new StringEntity("{\"longUrl\":\""+longUrl+"\"}"));
            httpPost.setHeader("Content-Type", "application/json");
            HttpResponse httpResponse = httpClient.execute(httpPost);

            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
How to&Answers:

See the Behavior Changes at Android Developers where it says that:

Android 6.0 release removes support for the Apache HTTP client. If your app
is using this client and targets Android 2.3 (API level 9) or higher,
use the HttpURLConnection class instead. This API is more efficient
because it reduces network use through transparent compression and
response caching, and minimizes power consumption. To continue using
the Apache HTTP APIs, you must first declare the following
compile-time dependency in your build.gradle file:

android {
    useLibrary 'org.apache.http.legacy' 
} 

Answer:

Please refer this. Alternative class is mentioned in Android Developer site.

The org.apache.http classes and the android.net.http.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.

Answer:

You can manually add an up-to-date version of the Apache HttpClient:

implementation 'org.apache.httpcomponents:httpclient:4.5.5'

Likewise, you can use another HTTP library altogether like OkHttp. You can also use a library which is more higher level, like Retrofit.