HttpClient Android स्टूडियो में आयात नहीं करेगा



android-studio gradle (15)

मेरे पास एंड्रॉइड स्टूडियो में लिखा गया एक साधारण वर्ग है:

package com.mysite.myapp;

import org.apache.http.client.HttpClient;

public class Whatever {
    public void headBangingAgainstTheWallExample () {
        HttpClient client = new DefaultHttpClient();
    }
}

और इससे मुझे निम्नलिखित संकलन समय त्रुटि मिलती है:

Cannot resolve symbol HttpClient

क्या Android स्टूडियो SDK में HttpClient शामिल नहीं है? यहां तक ​​कि अगर यह नहीं है, तो मैंने इसे अपने ग्रेडेल बिल्ड में इस तरह जोड़ा:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'org.apache.httpcomponents:httpclient:4.5'
}

अंतिम संकलन लाइन के साथ या उसके बिना, त्रुटि समान है। मैं क्या खो रहा हूँ?

https://code.i-harness.com


एक और तरीका है अगर आपके पास httpclient.jar फ़ाइल है तो आप ऐसा कर सकते हैं:

अपनी परियोजना में अपनी .jar फ़ाइल को "libs फ़ोल्डर" में पेस्ट करें। फिर ग्रेड में अपने build.gradle (मॉड्यूल: एप्लिकेशन) में इस लाइन को जोड़ें

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.0'
compile files('libs/httpcore-4.3.3.jar')
}

1- अपाचे जार फाइलें डाउनलोड करें (इस उत्तर के रूप में) 4.5.zip फाइल:
https://hc.apache.org/downloads.cgi?Preferred=http%3A%2F%2Fapache.arvixe.com%2F

2- ज़िप खोलकर जार फाइलों को अपने लिबास फोल्डर में कॉपी करें। आप इसे पा सकते हैं यदि आप अपने प्रोजेक्ट के शीर्ष पर जाते हैं जहां यह कहता है कि "एंड्रॉइड" आपको यू क्लिक करते ही एक सूची मिलेगी। इसलिए,

Android -> प्रोजेक्ट -> ऐप -> लिबास

, तो वहाँ जार डाल दिया।

3- in build.gradle (मॉड्यूल: ऐप) जोड़ें

compile fileTree(dir: 'libs', include: ['*.jar'])

में

 dependency { 
   }

4- जावा वर्ग में इन आयातों को जोड़ें:

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.CoreProtocolPNames;

ApacheHttp क्लाइंट को v23 sdk में हटा दिया गया है। आप HttpURLConnection या OkHttp जैसे तीसरे पक्ष के Http क्लाइंट का उपयोग कर सकते हैं।

रेफरी: https://developer.android.com/preview/behavior-changes.html#behavior-apache-http-client


HdpClient 23 और 23+ sdk में समर्थित नहीं है।

यदि आपको sdk 23 में उपयोग करने की आवश्यकता है, तो अपने कोड के नीचे कोड जोड़ें:

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

मेरे लिए यह काम कर रहा है। आशा है कि आप के लिए उपयोगी है।


HttpClient को एपीआई स्तर 22 में हटा दिया गया था और एपीआई स्तर 23 में हटा दिया गया था। आप अभी भी एपीआई स्तर 23 में इसका उपयोग कर सकते हैं और बाद में यदि आपको करना चाहिए, हालांकि HTTP को संभालने के लिए समर्थित विधियों में जाना सबसे अच्छा है। इसलिए, यदि आप 23 के साथ संकलन कर रहे हैं, तो इसे अपने build.gradle में जोड़ें:

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

आप इसे केवल ग्रेडेल निर्भरता में जोड़ सकते हैं:

compile "org.apache.httpcomponents:httpcore:4.3.2"

आपको सिर्फ एक लाइन जोड़ना है

useLibrary 'org.apache.http.legacy'

उदाहरण के लिए build.gradle (मॉड्यूल: ऐप) में

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.0"

    useLibrary 'org.apache.http.legacy'

    defaultConfig {
        applicationId "com.avenues.lib.testotpappnew"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
}

एपीआई 22 में वे पदावनत हो जाते हैं और एपीआई 23 में उन्हें पूरी तरह से हटा दिया जाता है, अगर आपको नए परिवर्धन से सभी फैंसी सामान की आवश्यकता नहीं है, तो एपीके से .jar फ़ाइलों का उपयोग करना है जो एपीआई 22 से पहले एकीकृत थे, लेकिन। के रूप में अलग .jar फ़ाइलें:

1. http://hc.apache.org/downloads.cgi
2. download httpclient 4.5.1, the zile file
3. unzip all files
4. drag in your project httpclient-4.5.1.jar, httpcore-4.4.3.jar and httpmime-4.5.1.jar
5. project, right click, open module settings, app, dependencies, +, File dependency and add the 3 files
6. now everything should compile properly

जैसा कि पहले उल्लेख किया गया है, org.apache.http.client.HttpClient किसी भी अधिक समर्थित नहीं है:

एसडीके (एपीआई स्तर) # 23।

आपको java.net.HttpURLConnection का उपयोग java.net.HttpURLConnection

यदि आप HttpURLConnection का उपयोग करते समय अपने कोड (और जीवन) को आसान बनाना चाहते हैं, तो यहां इस वर्ग का एक Wrapper है जो आपको GET , POST और PUT साथ सरल ऑपरेशन करने देगा, JSON का उपयोग करके, उदाहरण के लिए, HTTP PUT

HttpRequest request = new HttpRequest(API_URL + PATH).addHeader("Content-Type", "application/json");
int httpCode = request.put(new JSONObject().toString());
if (HttpURLConnection.HTTP_OK == httpCode) {
    response = request.getJSONObjectResponse();
} else {
  // log error
}
httpRequest.close()

इसका इस्तेमाल करने के लिए स्वतंत्र महसूस करें।

package com.calculistik.repository;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * <p>
 * Copyright © 2017, Calculistik . All rights reserved.
 * <p>
 * Oracle and Java are registered trademarks of Oracle and/or its
 * affiliates. Other names may be trademarks of their respective owners.
 * <p>
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common
 * Development and Distribution License("CDDL") (collectively, the
 * "License"). You may not use this file except in compliance with the
 * License. You can obtain a copy of the License at
 * https://netbeans.org/cddl-gplv2.html or
 * nbbuild/licenses/CDDL-GPL-2-CP. See the License for the specific
 * language governing permissions and limitations under the License.
 * When distributing the software, include this License Header
 * Notice in each file and include the License file at
 * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this particular file
 * as subject to the "Classpath" exception as provided by Oracle in the
 * GPL Version 2 section of the License file that accompanied this code. If
 * applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 * <p>
 * Contributor(s):
 * Created by alejandro tkachuk @aletkachuk
 * www.calculistik.com
 */
public class HttpRequest {

    public static enum Method {
        POST, PUT, DELETE, GET;
    }

    private URL url;
    private HttpURLConnection connection;
    private OutputStream outputStream;
    private HashMap<String, String> params = new HashMap<String, String>();

    public HttpRequest(String url) throws IOException {
        this.url = new URL(url);
        connection = (HttpURLConnection) this.url.openConnection();
    }

    public int get() throws IOException {
        return this.send();
    }

    public int post(String data) throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.POST.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        this.sendData(data);
        return this.send();
    }

    public int post() throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.POST.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        return this.send();
    }

    public int put(String data) throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.PUT.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        this.sendData(data);
        return this.send();
    }

    public int put() throws IOException {
        connection.setDoInput(true);
        connection.setRequestMethod(Method.PUT.toString());
        connection.setDoOutput(true);
        outputStream = connection.getOutputStream();
        return this.send();
    }

    public HttpRequest addHeader(String key, String value) {
        connection.setRequestProperty(key, value);
        return this;
    }

    public HttpRequest addParameter(String key, String value) {
        this.params.put(key, value);
        return this;
    }

    public JSONObject getJSONObjectResponse() throws JSONException, IOException {
        return new JSONObject(getStringResponse());
    }

    public JSONArray getJSONArrayResponse() throws JSONException, IOException {
        return new JSONArray(getStringResponse());
    }

    public String getStringResponse() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder response = new StringBuilder();
        for (String line; (line = br.readLine()) != null; ) response.append(line + "\n");
        return response.toString();
    }

    public byte[] getBytesResponse() throws IOException {
        byte[] buffer = new byte[8192];
        InputStream is = connection.getInputStream();
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        for (int bytesRead; (bytesRead = is.read(buffer)) >= 0; )
            output.write(buffer, 0, bytesRead);
        return output.toByteArray();
    }

    public void close() {
        if (null != connection)
            connection.disconnect();
    }

    private int send() throws IOException {
        int httpStatusCode = HttpURLConnection.HTTP_BAD_REQUEST;

        if (!this.params.isEmpty()) {
            this.sendData();
        }
        httpStatusCode = connection.getResponseCode();

        return httpStatusCode;
    }

    private void sendData() throws IOException {
        StringBuilder result = new StringBuilder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            result.append((result.length() > 0 ? "&" : "") + entry.getKey() + "=" + entry.getValue());//appends: key=value (for first param) OR &key=value(second and more)
        }
        sendData(result.toString());
    }

    private HttpRequest sendData(String query) throws IOException {
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
        writer.write(query);
        writer.close();
        return this;
    }

}

त्रुटि: (30, 0) ग्रेड डीएसएल विधि नहीं मिली: 'क्लासपाथ ()' संभावित कारण:

  • प्रोजेक्ट 'cid' एंड्रॉइड ग्रैडल प्लग-इन के एक संस्करण का उपयोग कर सकता है जिसमें विधि शामिल नहीं है (उदाहरण के लिए 'testCompile' 1.1.0 में जोड़ा गया था)। संस्करण 2.3.3 और सिंक परियोजना के लिए प्लगइन का उन्नयन
  • प्रोजेक्ट 'cid' ग्रेडेल के एक संस्करण का उपयोग कर सकता है जिसमें विधि शामिल नहीं है। ग्रैडल रैपर फ़ाइल खोलें
  • बिल्ड फ़ाइल में ग्रैडल प्लगइन गायब हो सकता है। ग्रेड प्लगइन लागू करें


  • बस इस का उपयोग करें: -

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

    मेरे लिए काम करें इस निर्भरता को अपनी बिल्ड.ग्रेड फ़ाइल में जोड़ें

    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'

    यदि आप कुछ वर्ग आयात करना चाहते हैं जैसे:

    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient; 
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;

    आप build.gradle (ग्रेडल निर्भरता) में निम्न पंक्ति जोड़ सकते हैं

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:27.1.0'
        implementation 'com.android.support:support-v4:27.1.0'
    
        .
        .
        .
    
        implementation 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    
    }

    URLConnection sdk 23 में किसी भी अधिक समर्थित नहीं है। आपको URLConnection का उपयोग URLConnection या डाउनग्रेड का उपयोग करने के लिए sdk 22 ( compile 'com.android.support:appcompat-v7:22.2.0' )

    यदि आपको sdk 23 की आवश्यकता है, तो इसे अपनी श्रेणी में जोड़ें:

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

    आप HttpClient जार को सीधे अपनी परियोजना में डाउनलोड करने और शामिल करने का प्रयास कर सकते हैं या इसके बजाय OkHttp उपयोग कर OkHttp हैं






    apache-httpclient-4.x