2015-03-19 6 views
42

एंड्रॉइड 5.1 की रिलीज के साथ, ऐसा लगता है कि सभी अपाचे http सामान को बहिष्कृत कर दिया गया है। दस्तावेज को देखकर बेकार है; वे सब कहते हैं किअब एंड्रॉइड पर एचटीपीएन्टिटी को हटा दिया गया है, विकल्प क्या है?

This class was deprecated in API level 22. Please use openConnection() instead. Please visit this webpage for further details.

कौन सा ठीक पहली बार जब आप इसे पढ़ है, लेकिन जब हर वर्ग कि पदावनत किया गया था कि कहते हैं, यह है कि उपयोगी नहीं है।

वैसे भी, HttpEntity जैसे वर्गों के लिए विकल्प क्या हैं, विशेष रूप से StringEntity, और MultipartEntity? मैंने एंड्रॉइड के Pair<T, S> कक्षा के अपने कार्यान्वयन के लिए BasicNameValuePair को प्रतिस्थापित किया, और ऐसा लगता है कि URLEncoder.encodeURLEncodedUtils के लिए एक अच्छा विकल्प है, लेकिन मुझे यकीन नहीं है कि HttpEntity के बारे में क्या करना है।

संपादित

मैं सिर्फ नेटवर्किंग सामान को फिर से लिखने का फैसला किया है। गोना रेट्रोफिट और OkHttp

संपादित

उपयोग करने के लिए गंभीरता से अपने कॉल और सामान पुराना वापस का उपयोग करने जा पर एक नज़र डालें प्रयास करें। सुंदर निफ्टी मुझे खुशी है मैंने किया था। कुछ बाधाएं थीं, लेकिन यह अच्छा है।

+0

की जगह आप पर एक नज़र हो सकता है [कैसे HttpClient से करने के लिए स्विच HttpUrlConnection] (http://stackoverflow.com/questions/26898667/how-to-switch-from-httpclient-to-httpurlconnection/26903289#26903289) – hgoebl

+0

यदि नीचे दिए गए उत्तरों में से कोई भी आपकी मदद करता है, y कहां सबसे सहायक एक उच्चारण करना चाहिए। – C0D3LIC1OU5

+0

'ओकेएचटीपी' का उपयोग करना बुद्धिमान विकल्प है। –

उत्तर

20

तुम हमेशा पिछले Apache Http ग्राहक आयात और उस का उपयोग कर सकते हैं। साथ ही, आप नेटवर्किंग लाइब्रेरी जैसे Volley या Retrofit पर एक नज़र डालना चाहेंगे, बस अगर आप इसके बजाय इसका उपयोग कर सकते हैं। यदि एक नई परियोजना शुरू करना है, तो नेटवर्किंग लाइब्रेरी का उपयोग करने की सिफारिश की जाती है क्योंकि पहिया को फिर से शुरू करने की कोई आवश्यकता नहीं है। लेकिन अगर आप HttpClient का उपयोग कर फंस गए हैं, तो पढ़ें।

संपादित करें: अपाचे HttpClient पर नवीनतम समाचार (2015/11/07 के रूप में)

गूगल एंड्रॉयड 1.0 अपाचे HttpClient का एक पूर्व बीटा स्नैपशॉट के साथ जारी किया गया था। पहले एंड्रॉयड रिहाई अपाचे HttpClient 4.0 एपीआई, समय से पहले ही जमे हुए हैं जबकि इंटरफेस के कई और आंतरिक संरचना थे अभी भी पूरी तरह से बाहर काम किया था के साथ मनाई गई। के रूप में अपाचे HttpClient 4.0 परियोजना परिपक्व था करने के लिए गूगल की उम्मीद कर उनके कोड पेड़ में नवीनतम कोड सुधार को शामिल किया गया था। दुर्भाग्य से ऐसा नहीं हुआ। Apache HttpClient का संस्करण भेज दिया गया है एंड्रॉइड प्रभावी रूप से एक कांटा बन गया है। आखिरकार गूगल जबकि अपाचे HttpClient का जायजा संस्करण के लिए उन्नयन करने से इनकार का हवाला देते हुए अनुकूलता इस तरह के निर्णय के लिए एक कारण के रूप में चिंताओं उनके कांटा के आगे विकास को बंद करने का फैसला किया। नतीजतन उन एंड्रॉयड डेवलपर्स जो Android पर अपाचे HttpClient API का उपयोग करके नए लक्षणों, प्रदर्शन सुधार और बग समाधान का लाभ नहीं ले जा सकते हैं जारी रखना चाहते हैं। एंड्रॉइड के लिए अपाचे एचटीपी क्लाइंट 4.3 पोर्ट था जो आधिकारिक रिलीज Google एंड्रॉइड के साथ संगत प्रदान करके स्थिति का समाधान करने का इरादा रखता था। यह देखते हुए कि Android API के रूप में 23 HttpClient की गूगल की कांटा इस परियोजना हटा दिया गया है किया गया है बंद कर दिया।

हालांकि, वहाँ अपाचे HttpClient v4.3

एंड्रॉयड एपीआई 22 और के एक अधिकारी एंड्रॉयड बंदरगाह है पुराने अपाचे HttpClient v4.3

dependencies { 
     compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
} 
का उपयोग करना चाहिए

एंड्रॉइड एपीआई 23 और नए एंड्रॉइड maintained by Marek Sebera के लिए अपाचे एचटीपी क्लाइंट पैकेज का उपयोग करना चाहिए

org.apache.http.client.HttpClient:

dependencies { 
    compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1' 
} 

जानकारी सही दिशा में से Apache.org

+1

चूंकि यह मेरे लिए स्पष्ट नहीं था: आपको 'import org.apache.http.whatever'' को cz.msebera.android.httpclient.whatever' आयात करने के लिए भी बदलना होगा। – Timmmm

+0

ऐसा लगता है कि 'cz.msebera.android' httpclient अब भी बहिष्कृत है? एपीके एंड्रॉइड स्टूडियो बनाने की कोशिश करते समय विफल रहता है और अलर्ट करता है कि httpclient अब एंड्रॉइड – Nom1fan

12

लिया HttpClient प्रलेखन अंक आप

यह इंटरफ़ेस एपीआई स्तर में पदावनत किया गया था 22. openConnection का उपयोग करें() बजाय। अधिक जानकारी के लिए कृपया इस वेबपेज पर जाएं।

का अर्थ है कि आपको java.net.URL.openConnection() पर स्विच करना चाहिए।

यहाँ कैसे आप यह कर सकते हैं:

java.net.URL url = new java.net.URL("http://some-server"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("POST"); 

// read the response 
System.out.println("Response Code: " + conn.getResponseCode()); 
InputStream in = new BufferedInputStream(conn.getInputStream()); 
String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8"); 
System.out.println(response); 
+0

द्वारा प्रदान की गई कक्षाओं के साथ संघर्ष करता है यह सही है, महोदय। – TechNyquist

+0

आप http क्लाइंट भाग के लिए सही हो सकते हैं ... टिप्पणी http सर्वर भाग के लिए बिल्कुल हास्यास्पद है (या URL.openConnection अब भी सेवा करने में सक्षम है ?! ;-) –

+2

यदि आप यह यूआरएल पढ़ते हैं। http://android-developers.blogspot.in/2011/09/androids-http-clients.html ** कौन सा ग्राहक सर्वोत्तम है? ** ** अपाचे HTTP क्लाइंट में एक्लेयर और फ्रायओ पर कम कीड़े हैं। इन रिलीज के लिए यह सबसे अच्छा विकल्प है। ** ** जिंजरब्रेड और बेहतर के लिए, HttpURLConnection सबसे अच्छा विकल्प है। ** इसका सरल एपीआई और छोटा आकार एंड्रॉइड के लिए यह बहुत अच्छा बनाता है।पारदर्शी संपीड़न और प्रतिक्रिया कैशिंग नेटवर्क उपयोग को कम करने, गति में सुधार और बैटरी बचाने के लिए। नए अनुप्रयोगों को HttpURLConnection का उपयोग करना चाहिए; यह वह जगह है जहां हम अपनी ऊर्जा आगे बढ़ेंगे। –

2

कॉल वेब सेवा httpclient द्वारा httpurlconnection

मेरी कोड यहाँ

public static String getDataFromUrl(String url) { 
     String result = null; 
//  System.out.println("URL comes in jsonparser class is: " + url); 
     try { 
      URL myurl=new URL(url); 
      HttpURLConnection urlConnection = (HttpURLConnection) myurl 
        .openConnection(); 
      urlConnection.setRequestMethod("GET"); 
      urlConnection.setDoInput(true); 
      urlConnection.connect(); 
      InputStream is=urlConnection.getInputStream(); 
      if (is != null) { 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       try { 
        BufferedReader reader = new BufferedReader(
          new InputStreamReader(is)); 
        while ((line = reader.readLine()) != null) { 
         sb.append(line); 
        } 
        reader.close(); 
       } finally { 
        is.close(); 
       } 
       result = sb.toString(); 
      } 
     }catch (Exception e){ 
      result=null; 
     } 
     return result; 
    } 
संबंधित मुद्दे