अँड्रॉइड ॲप्लिकेशनवरून HTTP विनंत्या पाठवत आहे. HttpURLConnection: URL शी कनेक्ट करा

व्हायबर डाउनलोड करा 17.03.2019
व्हायबर डाउनलोड करा
2 ऑक्टोबर 2011 रोजी रात्री 11:17 वा

F-Droid, Android साठी ओपन सोर्स सॉफ्टवेअर पॅकेजेसचे नेटवर्क भांडार, पॅच पाठवणाऱ्यांसाठी "बाजार"

विषय पर्यायी स्रोतअँड्रॉइडसाठी सॉफ्टवेअर आणि विशेषतः पर्यायी “बाजार” हे बऱ्याच वेळा आधीच तयार केले गेले आहेत, परंतु त्यांच्या वर्णन केलेल्या बहुतेक साइट्स उघडपणे वेरेझ प्रजनन ग्राउंड होत्या (म्हणूनच मी दुवे देत नाही). येथे मी F-Droid.org प्रकल्पाबद्दल बोलू इच्छितो, ज्याचा उद्देश वापरकर्त्यांसाठी मुक्त स्रोत अनुप्रयोग एकत्रित करणे आणि सहज उपलब्ध करून देणे आहे. मूळ सांकेतिक शब्दकोश(ओपन सोर्स) आणि वापर आणि सुधारणेसाठी स्पष्ट परवाने.

बाजार, shvarket आणि ॲप स्टोअर

थेट F-Droid वर जाण्यापूर्वी, मी Android प्लॅटफॉर्मवरील “बाजार” आणि मुक्त स्त्रोताच्या स्थितीबद्दल काही शब्द सांगू इच्छितो.

आता विक्रेते ज्याला “App Stores” आणि “Markets” म्हणतात ते Linux वापरकर्त्यांसाठी एक दशकाहून अधिक काळापासून उपलब्ध आहे आणि ते “नेटवर्क पॅकेज रेपॉजिटरी” म्हणून ओळखले जाते. पॅकेज मॅनेजर ही संकल्पना अनेक दशकांपूर्वीची आहे आणि ती सर्वात मजबूत आहे लिनक्स बाजू. आश्चर्याची गोष्ट नाही की, ही संकल्पना या क्षेत्रातील "सर्वोत्तम सराव" बनली आहे, इतकी की मायक्रोसॉफ्टने स्वतःचे पॅकेज मॅनेजर रिलीझ आणि प्रमोट केले आहे.

बरं, चांगल्या कल्पना जिंकल्या आहेत आणि Android साठी Android Marketplace आहे. असे दिसते की आपण ते वापरण्यासाठी पुरेसे मिळवू शकत नाही, कारण बहुतेक वापरकर्ते जे इतर कोणत्याही गोष्टीशी परिचित नाहीत. परंतु Android Market मध्ये अनेक समस्या आहेत:

  • बाजार हा एकंदर खुल्या व्यासपीठाचा बंद घटक आहे.
  • मागील परिच्छेदावरून असे दिसून आले आहे की AOSP (Android ओपन सोर्स प्रोजेक्ट) कोडवर आधारित बनवलेल्या उपकरणांवर, कोणतेही मार्केट नाही आणि स्वस्त उपकरणांसाठी ही एक सामान्य परिस्थिती आहे (लक्षात ठेवा, ते स्वस्त चायनीज Noname, Inc, किंवा नाव असलेले विक्रेते, जसे Amazon)
  • जर वापरकर्त्यांना स्वतःला Android सुधारित करायचे असेल आणि ते अधिक चांगले बनवायचे असेल (उदाहरणार्थ, CyanogenMod), तर ते त्यांच्या विकासासाठी कायदेशीररित्या मार्केट वापरू शकत नाहीत.
  • मार्केटमधील सॉफ्टवेअरची गुणवत्ता हवी असते. या अर्थाने की तेथे बरेच "कचरा" आणि स्पष्टपणे संशयास्पद कार्यक्रम आहेत.
  • शेवटचा मुद्दा या वस्तुस्थितीमुळे वाढला आहे की Google वापरकर्त्यांच्या विशिष्ट गटांसाठी (भौगोलिक किंवा अन्यथा) विशिष्ट प्रोग्राम्सची उपलब्धता कृत्रिमरित्या फिल्टर करते, जेणेकरून उच्च-गुणवत्तेचे, सशुल्क कार्यक्रमअनेकदा अनुपलब्ध.
  • फिल्टरिंग इतर निकषांनुसार देखील केले जाते, उदाहरणार्थ, ज्या डिव्हाइसमधून प्रवेश केला जातो त्या प्रकारानुसार, दुसऱ्या शब्दांत, मार्केट स्वतःला वापरकर्त्यापेक्षा अधिक हुशार बनवते (जे आपल्याला माहित आहे की, संगणक प्रोग्राम खराब आहेत )
  • मार्केट पुरेशी शोध आणि वर्गीकरण क्षमता प्रदान करत नाही, उदाहरणार्थ, विशिष्ट परवान्याखाली ऑफर केलेले सॉफ्टवेअर शोधण्यात अक्षमता.

पुन्हा स्रोत उघडायचा?

वरीलपैकी काही समस्यांचे निराकरण करण्यासाठी अनेक (अनेक?) प्रकल्प तयार केले गेले आहेत, परंतु F-Droid चा उद्देश स्वतः रिपॉझिटरी आणि त्यात उपलब्ध सॉफ्टवेअर या दोन्हींवर नियंत्रण ठेवून वापरकर्त्यांच्या स्वतःच्या हातात देऊन त्यांचे मूलभूतपणे निराकरण करण्याचा आहे. (खरं तर, प्रकल्प अशा वापरकर्त्यांच्या समुदायाचे प्रतिनिधित्व करतो ज्यांच्यासाठी वरील प्रश्न महत्त्वाचे आहेत). हे ओपन सोर्स परवाने वापरून साध्य करते - दोन्ही रिपॉजिटरी सॉफ्टवेअरसाठी आणि पॅकेज मॅनेजरसाठी आणि रिपॉजिटरीमध्ये उपलब्ध सॉफ्टवेअरसाठी.

मुक्त स्त्रोताशी परिचित असलेल्या अनेकांसाठी, हे स्पष्ट आहे की ज्यांना श्रवणार्थाने आणि "अंतर्ज्ञानाने" (“फ्रीबी, सर!”) अधिक माहिती आहे त्यांच्यासाठी हे महत्त्वाचे का आहे; चांगला मार्गकिमान स्वीकार्य सॉफ्टवेअर गुणवत्तेची हमी. अंतर्गत " किमान गुणवत्ता» अनुपस्थितीचा संदर्भ देते दुर्भावनापूर्ण कोडआणि स्पष्ट चुका आणि वगळणे. वापरकर्त्यांनी स्वतः कोड नियंत्रित करून हे साध्य केले आहे. अर्थात, साठी विशिष्ट वापरकर्ताअसे नियंत्रण साध्य करणे कठीण आहे, परंतु मुक्त स्रोत पूर्णपणे परस्पर मदत करणाऱ्या समुदायाच्या संकल्पनेवर आधारित आहे (ग्राहक/उत्पादक संकल्पनेऐवजी). म्हणूनच ज्यांना पॅच पाठवायचे आहे त्यांच्यासाठी शीर्षकात “F-Droid - “बाजार” हा वाक्यांश समाविष्ट आहे.

F-Droid, FOSS ची आवड असलेला दाढी असलेला रोबोट

पण पुरेसा सिद्धांत. F-Droid प्रकल्पाची स्थापना Ciaran Gultnieks यांनी ऑक्टोबर 2010 मध्ये केली होती, म्हणजे तो एक वर्षाचाही नाही. हा फार काळ नाही, परंतु या काळात प्रकल्प चांगला विकसित झाला आहे. त्यामुळे त्याच्याकडे एक वेबसाइट आणि एक मंच आहे. रेपॉजिटरीमध्ये उपलब्ध असलेले अर्ज वेब इंटरफेसद्वारे पाहिले जाऊ शकतात. मार्केटच्या मानकांनुसार (कचरा फ्रीवेअरने भरलेले) आणि अगदी सामान्य लिनक्स वितरणानुसार अजूनही काही अनुप्रयोग आहेत: सुमारे शंभर शीर्षके. एकीकडे, हे अगदी लहान संख्येसारखे दिसते, परंतु दुसरीकडे, मुक्त स्त्रोत Android इकोस्फीअरची क्षमता तरीही मोठी नाही (माझ्या मते 200-300 अधिक किंवा कमी कार्यरत प्रोग्राम). याव्यतिरिक्त, आपण आपल्या डिव्हाइसवर एकाच वेळी 100 अनुप्रयोग देखील स्थापित करू इच्छित नाही, परंतु आपल्याला निःसंशयपणे तेथे अनेक उपयुक्त प्रोग्राम सापडतील.

अर्थात, F-Droid चे मुख्य सौंदर्य डिव्हाइसवर चालणारे पॅकेज व्यवस्थापक आहे. ते या पृष्ठावरून डाउनलोड केले जाऊ शकते (किंवा थेट दुवा, लेखाच्या सुरुवातीला QR कोड). मुख्य विंडोचा स्क्रीनशॉट खाली दर्शविला आहे:

तीन टॅब उपस्थित आहेत: इंस्टॉलेशनसाठी सॉफ्टवेअर उपलब्ध आहे, आधीच इंस्टॉल केलेले आहे आणि इंस्टॉल केलेल्यासाठी अपडेट्स (तसे, मॅनेजर स्वतः त्याच प्रकारे अपडेट केला जातो). नावाने शोध समर्थित आहे. तुम्हाला स्वारस्य असलेल्या अर्जाबद्दल अधिक माहिती मिळू शकते तपशीलवार माहिती- वर्णन, लिंक मुख्यपृष्ठ, बग ट्रॅकर, स्रोत कोड भांडार, देणगी लिंक. शेवटी, इंस्टॉलेशनसाठी उपलब्ध असलेल्या अनुप्रयोगाच्या आवृत्त्या देखील येथे सादर केल्या आहेत. आणि इथे F-Droid चे वैशिष्ट्य आहे जे नेहमी Linux वितरणासाठी देखील उपलब्ध नसते: ऍप्लिकेशनच्या अनेक आवृत्त्या समर्थित आहेत, ज्या स्वस्त आणि "जुन्या" डिव्हाइसेसच्या मालकांद्वारे कौतुक केल्या जातील ज्यांच्या विक्रेत्यांनी नवीन आवृत्त्यांसाठी अपग्रेड जारी करण्यास नकार दिला आहे. Android: प्रोग्रामची नवीनतम आवृत्ती कार्य करत नसल्यास, आपण नेहमी मागीलपैकी एक वापरून पाहू शकता.

F-Droid हे अँड्रॉइड ऍप्लिकेशन्सचे भांडार आहे ज्यामध्ये केवळ विनामूल्य उपयुक्तता आहेत.

कार्यक्रम कॅटलॉग

अनधिकृत F-Droid स्टोअर विनामूल्य सॉफ्टवेअर डाउनलोड करण्याची क्षमता देते. येथे तुम्हाला फक्त जे उपलब्ध आहे तेच सापडत नाही गुगल प्ले, परंतु अधिकृत बाजारपेठेत संयम उत्तीर्ण न केलेले प्रोग्राम देखील. बहुतांश कॅटलॉगमध्ये ॲड ब्लॉकर्स, ऑफलाइन डिक्शनरी, हॅकिंग युटिलिटीज आणि इतर तत्सम सॉफ्टवेअर असतात.

दुर्दैवाने, F-Droid मध्ये बरेच लोकप्रिय प्रोग्राम आहेत आणि व्यावहारिकरित्या कोणतेही गेम नाहीत. प्रतिष्ठापन प्रक्रिया देखील फार सोयीस्कर नाही - विनंती केलेल्या परवानग्या प्रतिष्ठापन प्रक्रिया सुरू झाल्यानंतर प्रदर्शित केल्या जातात. स्थापित केलेले क्लायंट थेट इंटरफेसमधून अद्यतनित किंवा काढले जावेत. F-Droid स्वतंत्रपणे अधिक वर्तमान आवृत्त्यांच्या स्वरूपाचे निरीक्षण करते आणि वापरकर्त्याला त्याबद्दल सूचित करते. हे लक्षात घेणे महत्त्वाचे आहे की रेपॉजिटरीमधील सर्व प्रोग्राम्स ओपन सोर्स आहेत. त्यामुळे तुम्ही त्यांच्या सुरक्षिततेची खात्री बाळगू शकता.

वापर

F-Droid ला नोंदणीची आवश्यकता नाही. आणखी एक एक आनंददायी प्लसया मार्केटचा वापर करणे म्हणजे तृतीय-पक्ष स्त्रोतांकडून पूर्वी स्थापित केलेले अनुप्रयोग अद्यतनित करण्याची क्षमता. तथापि, त्याच्या सर्व फायद्यांसह, स्टोअरमध्ये एक ऐवजी लक्षणीय कमतरता आहे. तुम्ही सुपरयूझर अधिकार (रूट) मिळवल्याशिवाय ते वापरू शकत नाही.

महत्वाची वैशिष्टे

  • वरील उपकरणांसाठी अनुप्रयोग कॅटलॉगमध्ये प्रवेश उघडतो Android आधारित;
  • केवळ विनामूल्य आणि मुक्त स्त्रोत कार्यक्रम ऑफर करते;
  • अद्यतनांच्या उपलब्धतेचा अहवाल देते, परंतु ते कसे डाउनलोड करायचे हे माहित नाही (ॲप्लिकेशन इंटरफेसवरून डाउनलोड केले जाते);
  • पूर्व निर्मिती आवश्यक नाही खाते;
  • उपलब्ध असल्यासच कार्य करते रूट अधिकार;
  • खूप अंतर्ज्ञानी इंटरफेस नाही.

मध्ये Android HTTP POST आणि GET ट्यूटोरियल, मी HTTP कसे पाठवायचे ते स्पष्ट केले आहे पोस्ट आणि Android मध्ये प्रोग्रामॅटिक पद्धतीने विनंती मिळवा.

आपण वापरू शकतो org.apache.http.client.HttpClient HTTP विनंत्या करण्यासाठी वर्ग.

HTTP POST विनंती पाठवा

HTTP POST विनंत्या पाठवण्यासाठी पायऱ्या फॉलो करा.

HttpClient httpClient = नवीन DefaultHttpClient();

2. HttpPost चे एक ऑब्जेक्ट तयार करा

HttpPost httpPost = नवीन HttpPost("http://www.example.com");

3. POST पॅरामीटर्स जोडा

यादी (2); nameValuePair.add(नवीन BasicNameValuePair("वापरकर्तानाव", "test_user")); nameValuePair.add(नवीन BasicNameValuePair("पासवर्ड", "123456789"));

4. POST डेटा एन्कोड करा

HTTP विनंती करण्यापूर्वी आम्हाला आमचा डेटा वैध URL फॉरमॅटमध्ये एन्कोड करणे आवश्यक आहे.

//पोस्ट डेटा एन्कोड करण्याचा प्रयत्न करा ( httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); ) पकडा (असमर्थितEncodingException e) ( e.printStackTrace(); )

5. शेवटी HTTP POST विनंती करणे

प्रयत्न करा ( HttpResponse response = httpClient.execute(httpPost); // लॉग Log.d("Http पोस्ट प्रतिसाद:", response.toString()); ) पकडण्यासाठी प्रतिसाद लिहा (ClientProtocolException e) ( // लॉग अपवाद e.printStackTrace) (); ) पकड (IOException e) ( // लॉग अपवाद e.printStackTrace(); )

अशा विनंत्या करण्यापूर्वी तुम्ही तुमच्या ॲपमध्ये इंटरनेट परवानगी जोडल्याची खात्री करा अन्यथा तुम्हाला काही त्रुटी दिसू शकतात.

तुमच्या ॲप्लिकेशन टॅगवरील मॅनिफेस्ट फाइलमध्ये ही ओळ जोडून तुम्ही इंटरनेट परवानग्या जोडू शकता.

Android HTTP POST उदाहरण

पॅकेज com.example.httprequestexample; java.io.IOException आयात करा; java.io.UnsupportedEncodingException आयात करा; java.util.ArrayList आयात करा; java.util.List आयात करा; org.apache.http.HttpResponse आयात करा; org.apache.http.NameValuePair आयात करा; org.apache.http.client.ClientProtocolException आयात करा; org.apache.http.client.HttpClient आयात करा; org.apache.http.client.entity.UrlEncodedFormEntity आयात करा; org.apache.http.client.methods.HttpGet आयात करा; org.apache.http.client.methods.HttpPost आयात करा; org.apache.http.impl.client.DefaultHttpClient आयात करा; org.apache.http.message.BasicNameValuePair आयात करा; android.app.Activity आयात करा; android.os.Bundle आयात करा; android.util.Log आयात करा; सार्वजनिक वर्ग HTTPPostActivity क्रियाकलाप वाढवते ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); makePostRequest(); ) खाजगी शून्य makePostRequest() ( HttpClient = नवीन httpClient) ; // तुमच्या url HttpPost httpPost = नवीन HttpPost("www.example.com" //पोस्ट डेटा सूची) सह बदला nameValuePair = नवीन ArrayList (2); nameValuePair.add(नवीन BasicNameValuePair("वापरकर्तानाव", "test_user")); nameValuePair.add(नवीन BasicNameValuePair("पासवर्ड", "123456789")); //पोस्ट डेटा एन्कोड करण्याचा प्रयत्न करा ( httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); ) कॅच (UnsupportedEncodingException e) ( // लॉग अपवाद e.printStackTrace(); ) //पोस्ट विनंती करणे. प्रयत्न करा ( HttpResponse response = httpClient.execute(httpPost); // लॉग ला प्रतिसाद लिहा Log.d("Http पोस्ट प्रतिसाद:", response.toString()); ) पकडा (ClientProtocolException e) ( // लॉग अपवाद e.printStackTrace) (); ) पकड (IOException e) ( // लॉग अपवाद e.printStackTrace(); ) )

HTTP GET विनंती पाठवा

HTTP GET विनंती पाठवण्यासाठी चरणांचे अनुसरण करा.
1. HttpClient चे ऑब्जेक्ट तयार करा

HttpClient क्लायंट = नवीन DefaultHttpClient();

2. HttpGet चे एक ऑब्जेक्ट तयार करा

HttpGet विनंती = नवीन HttpGet("http://www.example.com");

3. शेवटी HTTP विनंती करा

Http प्रतिसाद प्रतिसाद; प्रयत्न करा ( प्रतिसाद = client.execute(request); Log.d("GET विनंतीचा प्रतिसाद", response.toString()); ) पकडा (ClientProtocolException e) ( // TODO ऑटो-जनरेट केलेले कॅच ब्लॉक e.printStackTrace(); ) पकडणे (IOException e) ( // TODO स्वयं-निर्मित कॅच ब्लॉक e.printStackTrace(); )

Android HTTP GET उदाहरण

पॅकेज com.example.httprequestexample; java.io.IOException आयात करा; java.io.UnsupportedEncodingException आयात करा; java.util.ArrayList आयात करा; java.util.List आयात करा; org.apache.http.HttpResponse आयात करा; org.apache.http.NameValuePair आयात करा; org.apache.http.client.ClientProtocolException आयात करा; org.apache.http.client.HttpClient आयात करा; org.apache.http.client.entity.UrlEncodedFormEntity आयात करा; org.apache.http.client.methods.HttpGet आयात करा; org.apache.http.client.methods.HttpPost आयात करा; org.apache.http.impl.client.DefaultHttpClient आयात करा; org.apache.http.message.BasicNameValuePair आयात करा; android.app.Activity आयात करा; android.os.Bundle आयात करा; android.util.Log आयात करा; सार्वजनिक वर्ग HTTPGETAactivity क्रियाकलाप वाढवते ( @Override protected void onCreate(Bundle savedInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.main); makeGetRequest(); ) खाजगी शून्य makeGetRequest() (HttpClientlienttplientpH) (HttpClientlientplient) = new Default ; HttpGet विनंती = नवीन HttpGet("http://www.example.com"); // आपल्या url HttpResponse प्रतिसादाने बदला ( प्रतिसाद = client.execute(request); Log.d("GET विनंतीचा प्रतिसाद" , response.toString()); कॅच (ClientProtocolException e) ( // TODO ऑटो-जनरेट केलेले कॅच ब्लॉक e.printStackTrace(); ) कॅच (IOException e) ( // TODO ऑटो-जनरेट केलेले कॅच ब्लॉक e.printStackTrace(); ) ) )

उच्च स्तरावर, तुम्ही रिक्वेस्टक्व्यू तयार करून आणि ऑब्जेक्ट्सची विनंती करून ती पास करून व्हॉली वापरता. RequestQueue नेटवर्क ऑपरेशन्स चालवण्यासाठी, कॅशेमधून वाचन आणि लिहिण्यासाठी आणि प्रतिसाद पार्स करण्यासाठी वर्कर थ्रेड्स व्यवस्थापित करते. विनंत्या कच्च्या प्रतिसादांचे पार्सिंग करतात आणि व्हॉली हे विश्लेषित प्रतिसाद परत डिलिव्हरीसाठी मुख्य थ्रेडवर पाठवण्याची काळजी घेते.

हा धडा Volley.newRequestQueue सुविधा पद्धत वापरून विनंती कशी पाठवायची याचे वर्णन करतो, जी तुमच्यासाठी विनंतीपंक्त सेट करते. पुढील धडा पहा, माहितीस्वतः विनंती रांग कशी सेट करावी.

हा धडा विनंतीपंक्तीत विनंती कशी जोडायची आणि विनंती कशी रद्द करायची याचे देखील वर्णन करतो.

इंटरनेट परवानगी जोडा

व्हॉली वापरण्यासाठी, तुम्ही तुमच्या ॲपच्या मॅनिफेस्टमध्ये परवानगी जोडणे आवश्यक आहे. त्याशिवाय, तुमचा ॲप नेटवर्कशी कनेक्ट करण्यात सक्षम होणार नाही.

newRequestQueue वापरा

Volley एक सोयीस्कर पद्धत प्रदान करते Volley.newRequestQueue जी तुमच्यासाठी डिफॉल्ट मूल्ये वापरून विनंतीपंक्त सेट करते आणि रांग सुरू करते. उदाहरणार्थ:

कोटलिन

val textView = findViewById (R.id.text) // ... // विनंतीपंक्तीची स्थापना करा. val queue = Volley.newRequestQueue(this) val url = "http://www.google.com" // प्रदान केलेल्या URL वरून स्ट्रिंग प्रतिसादाची विनंती करा. val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener ( प्रतिसाद -> // प्रतिसाद स्ट्रिंगचे पहिले 500 वर्ण प्रदर्शित करा. textView.text = "प्रतिसाद आहे: $(response.substring(0, 500))" ), Response.ErrorListener ( textView.text = "ते झाले" t work!" )) // विनंती रांगेत विनंती जोडा. queue.add(stringRequest)

जावा

final TextView textView = (TextView) findViewById(R.id.text); // ... // विनंती रांग त्वरित करा. विनंतीची रांग = Volley.newRequestQueue(this); स्ट्रिंग url = "http://www.google.com"; // प्रदान केलेल्या URL वरून स्ट्रिंग प्रतिसादाची विनंती करा. StringRequest stringRequest = नवीन StringRequest(Request.Method.GET, url, नवीन Response.Listener () ( @Override public void onResponse(String response) ( // प्रतिसाद स्ट्रिंगचे पहिले 500 वर्ण प्रदर्शित करा. textView.setText("प्रतिसाद आहे: "+ response.substring(0,500)); ) ), नवीन प्रतिसाद.ErrorListener () ( @Override public void onErrorResponse(VolleyError error) ( textView.setText("ते काम करत नाही!"); ) ) ;// विनंती queue.add(stringRequest);

व्हॉली नेहमी मुख्य थ्रेडवर विश्लेषित प्रतिसाद वितरीत करते. मुख्य थ्रेडवर चालणे प्राप्त झालेल्या डेटासह UI नियंत्रणे पॉप्युलेट करण्यासाठी सोयीस्कर आहे, कारण तुम्ही थेट तुमच्या प्रतिसाद हँडलरकडून UI नियंत्रणे मुक्तपणे सुधारू शकता, परंतु लायब्ररीद्वारे प्रदान केलेल्या अनेक महत्त्वाच्या शब्दार्थांसाठी हे विशेषतः महत्वाचे आहे, विशेषत: विनंत्या रद्द करण्याशी संबंधित. .

Volley.newRequestQueue सुविधा पद्धत वापरण्याऐवजी स्वतः विनंतीपंक्ती कशी सेट करायची याचे वर्णन पहा.

विनंती पाठवा

विनंती पाठवण्यासाठी, तुम्ही फक्त एक तयार करा आणि वर दाखवल्याप्रमाणे add() सह विनंतीपंक्तीत जोडा. एकदा तुम्ही विनंती जोडली की ती पाइपलाइनमधून फिरते, सर्व्हिस केली जाते आणि त्याचा कच्चा प्रतिसाद विश्लेषित आणि वितरित केला जातो.

जेव्हा तुम्ही add() ला कॉल करता, तेव्हा व्हॉली एक कॅशे प्रोसेसिंग थ्रेड आणि नेटवर्क डिस्पॅच थ्रेड्सचा एक पूल चालवते. जेव्हा तुम्ही रांगेत विनंती जोडता, तेव्हा ती कॅशे थ्रेडद्वारे उचलली जाते आणि ट्राय केली जाते: विनंती कॅशेमधून सेवा केली जाऊ शकते, तर कॅशे केलेला प्रतिसाद कॅशे थ्रेडवर पार्स केला जातो आणि विश्लेषित प्रतिसाद मुख्य थ्रेडवर वितरित केला जातो. विनंती कॅशेमधून सर्व्हिस केली जाऊ शकत नसल्यास, ती नेटवर्क रांगेत ठेवली जाते. पहिला उपलब्ध नेटवर्क थ्रेड रांगेतून विनंती घेतो, HTTP व्यवहार करतो, वर्कर थ्रेडवरील प्रतिसादाचे विश्लेषण करतो, कॅशेवर प्रतिसाद लिहितो, आणि पोस्टवितरणासाठी मुख्य थ्रेडवर विश्लेषित प्रतिसाद परत.

लक्षात घ्या की I/O अवरोधित करणे आणि पार्सिंग/डीकोडिंग सारख्या महागड्या ऑपरेशन्स वर्कर थ्रेड्सवर केल्या जातात. आपण कोणत्याही थ्रेडवरून विनंती जोडू शकता, परंतु प्रतिसाद नेहमी मुख्य थ्रेडवर वितरित केले जातात.

आकृती 1 विनंतीचे जीवन दर्शवते:

आकृती 1.एका विनंतीचे जीवन.

विनंती रद्द करा

विनंती रद्द करण्यासाठी, तुमच्या विनंती ऑब्जेक्टवर cancel() वर कॉल करा. एकदा रद्द केल्यानंतर, व्हॉली हमी देते की तुमच्या प्रतिसाद हँडलरला कधीही कॉल केला जाणार नाही. याचा अर्थ व्यवहारात असा आहे की तुम्ही तुमच्या सर्व प्रलंबित विनंत्या तुमच्या क्रियाकलाप पद्धतीत रद्द करू शकता आणि तुम्हाला getActivity() == null तपासण्यासाठी तुमच्या प्रतिसाद हँडलरला कचरा टाकण्याची गरज नाही, मग onSaveInstanceState() ला आधीच कॉल केला गेला असेल. , किंवा इतर बचावात्मक बॉयलरप्लेट.

या वर्तनाचा फायदा घेण्यासाठी, तुम्हाला सामान्यतः सर्व इन-फ्लाइट विनंत्या योग्य वेळी रद्द करण्यात सक्षम होण्यासाठी त्यांचा मागोवा घ्यावा लागेल. एक सोपा मार्ग आहे: तुम्ही प्रत्येक विनंतीसोबत टॅग ऑब्जेक्ट जोडू शकता. त्यानंतर तुम्ही रद्द करण्याच्या विनंत्यांची व्याप्ती देण्यासाठी हा टॅग वापरू शकता. उदाहरणार्थ, तुम्ही तुमच्या सर्व विनंत्या टॅग करू शकता सहते च्या वतीने केले जात आहेत आणि कडून requestQueue.cancelAll(this) वर कॉल करा. त्याचप्रमाणे, तुम्ही सर्व लघुप्रतिमा विनंत्या त्यांच्या संबंधित टॅबसह टॅबमध्ये टॅग करू शकता आणि याची खात्री करण्यासाठी स्वाइप करून रद्द करू शकता. नवीनटॅब दुसऱ्याच्या विनंत्यांद्वारे धरून ठेवला जात नाही.

येथे एक उदाहरण आहे जे टॅगसाठी स्ट्रिंग मूल्य वापरते:

  1. तुमचा टॅग परिभाषित करा आणि तुमच्या विनंत्यांमध्ये जोडा.

    कोटलिन

    val TAG = "MyTag" val stringRequest: StringRequest // हे अस्तित्वात आहे असे गृहीत धरा. val requestQueue: RequestQueue? // हे अस्तित्वात आहे असे समजा. // विनंतीवर टॅग सेट करा. stringRequest.tag = TAG // RequestQueue मध्ये विनंती जोडा. requestQueue?.add(stringRequest)

    जावा

    public static final String TAG = "MyTag"; StringRequest stringRequest; // हे अस्तित्वात आहे असे समजा. विनंतीपंक्त विनंती रांग; // हे अस्तित्वात आहे असे समजा. // विनंतीवर टॅग सेट करा. stringRequest.setTag(TAG); // विनंती रांगेत विनंती जोडा. requestQueue.add(stringRequest);
  2. तुमच्या क्रियाकलाप पद्धतीमध्ये, हा टॅग असलेल्या सर्व विनंत्या रद्द करा.

    कोटलिन

    संरक्षित मजा onStop() ( super.onStop() requestQueue?.cancelAll(TAG) )

    जावा

    @Override संरक्षित शून्य onStop () ( super.onStop(); if (requestQueue != null) ( requestQueue.cancelAll(TAG); ) )

    विनंत्या रद्द करताना काळजी घ्या. तुम्ही एखादे राज्य पुढे नेण्यासाठी किंवा दुसरी प्रक्रिया सुरू करण्यासाठी तुमच्या प्रतिसाद हँडलरवर अवलंबून असाल, तर तुम्हाला याचा हिशेब देणे आवश्यक आहे. पुन्हा, प्रतिसाद हँडलरला कॉल केला जाणार नाही.



आम्ही वाचण्याची शिफारस करतो

वर