एक सामान्य कार्य। जबकि httpentity अब नए API संस्करणों में उपलब्ध नहीं है, वॉली का उपयोग करके मल्टीपार्ट अनुरोधों को प्राप्त करने के अभी भी तरीके हैं।
, हम वॉली के अनुरोध वर्ग का विस्तार कर सकते हैं जैसे: आयात com.android.volley.authfailureerror;
आयात com.android.volley.networkresponse;
आयात com.android.volley.parseerror;
आयात com.android.volley.request;
आयात com.android.volley.response;
आयात com.android.volley.volleyerror;
आयात com.android.volley.toolbox.httpheaderParser;
आयात java.util.map;
क्लास मल्टीपर्टरेस्ट ने अनुरोध किया है {
// अनुरोध प्रतिक्रिया के लिए श्रोता
निजी अंतिम प्रतिक्रिया। Listener Mlistener;
// अनुरोध त्रुटि के लिए श्रोता
निजी अंतिम प्रतिक्रिया।
// अनुरोध हेडर
निजी अंतिम नक्शा mheaders;
// मल्टीपार्ट माइम प्रकार (जैसे, "मल्टीपार्ट/फॉर्म-डेटा; सीमा = xxx")
निजी अंतिम स्ट्रिंग mmimetype;
// मल्टीपार्ट के रूप में शरीर का अनुरोध करें
निजी अंतिम बाइट [] mmultipartbody;
// कंस्ट्रक्टर
public multionartrequest (स्ट्रिंग URL, मैप हेडर, स्ट्रिंग mimetype, बाइट [] मल्टीपार्टबॉडी,
Response.Listener श्रोता, response.errorlistener errorListener) {
सुपर (Method.Post, URL, ERRORLISTENER);
this.mlistener = श्रोता;
this.merrorlistener = errorListener;
this.mheaders = हेडर;
this.mmimetype = mimetype;
this.mmultipartbody = multivartbody;
}
// गेटर्स और सेटर्स
// ओवरराइड getheaders () यदि आपको कस्टम हेडर जोड़ने की आवश्यकता है
@Override
सार्वजनिक नक्शा गेथेडर्स () थ्रो ऑफ़फेल्योररर {
वापसी (mheaders! = null)? mheaders: super.getheaders ();
}
// ओवरराइड getBodyContentType () मल्टीपार्ट अनुरोध के लिए सही MIME प्रकार सेट करने के लिए
@Override
सार्वजनिक स्ट्रिंग getBodyContentType () {
मिमीमेटाइप लौटें;
}
// ओवरराइड गेटबॉडी () को मल्टीपार्ट बॉडी को वापस करने के लिए
@Override
सार्वजनिक बाइट [] getBody () थ्रो ऑफ़फेल्योररर {
Mmultipartbody लौटें;
}
// ओवरराइड parsenetworkResponse () एक नेटवर्क के रूप में प्रतिक्रिया को पार्स करने के लिए
@Override
संरक्षित प्रतिक्रिया ParsenetWorkResponse (NetworkResponse प्रतिक्रिया) {
कोशिश {
वापसी प्रतिक्रिया। success (
प्रतिक्रिया,
Httpheaderparser.parsecacheaheaders (प्रतिक्रिया));
} पकड़ (अपवाद ई) {
वापसी प्रतिक्रिया।
}
}
// प्रतिक्रिया और त्रुटि प्रदान करना
@Override
संरक्षित शून्य deliverResponse (networkresponse प्रतिक्रिया) {
Mlistener.onResponse (प्रतिक्रिया);
}
@Override
पब्लिक शून्य डिलीवरर (वॉलीरोर एरर) {
merrorlistener.onerrorresponse (त्रुटि);
}
… 0];
BytearrayoutputStream Bos = नया BytearRayOutputStream ();
DataOutputStream DOS = नया DataOutputStream (BOS);
कोशिश {
// पाठ डेटा
BuildTextPart (डॉस, "नाम", "जॉन डो");
BuildTextPart (डॉस, "ईमेल", "[email protected]");
// छवि डेटा
BitMap ImageBitMap = BitMapFactory.Decoderesource (संदर्भ.गेट्रसोर्स (), r.drawable.my_image);
बिल्डिमेजपार्ट (डॉस, "इमेज", इमेजबिटमैप);
} पकड़ (ioException e) {
e.PrintStackTrace ();
}
multipartbody = bos.tobytearray (); :
"my_url",
null, // हेडर
"मल्टीपार्ट/फॉर्म-डेटा",
मल्टीपार्टबॉडी,
नई प्रतिक्रिया। Listener
() {
@Override
सार्वजनिक शून्य onResponse (networkresponse प्रतिक्रिया) {
// संभाल प्रतिक्रिया
}
},
नई प्रतिक्रिया। errorlistener () {
@Override
सार्वजनिक शून्य onerrorresponse (वॉलीरर त्रुटि) {
// संभाल त्रुटि
}
}); void buildTextPart (DataOutputStream DataOutputStream, String Name, String value) IOException {फेंकता है {
DataOutputStream.WriteBytes (दोहाइफेंस बाउंड्री लाइनेंड);
DataOutputStream.WriteBytes ("सामग्री-डिस्कोज़िशन: फॉर्म-डेटा; नाम = \" "नाम" नाम "\" "लाइनेंड);
DataOutputStream.WriteBytes (लाइनेंड);
DataOutputStream.WriteBytes (मान);
DataOutputStream.WriteBytes (लाइनेंड);
… एक volleymultipartrequest वर्ग का कार्यान्वयन:
आयात com.android.volley.authfailureerror;
आयात com.android.volley.networkresponse;
आयात com.android.volley.parseerror;
आयात com.android.volley.request;
आयात com.android.volley.response;
आयात com.android.volley.volleyerror;
आयात com.android.volley.toolbox.httpheaderParser;
आयात java.io.bytearrayoutputStream;
आयात java.io.dataoutputStream;
आयात java.io.ioException;
आयात java.util.hashmap;
आयात java.util.map;
सार्वजनिक वर्ग volleymultipartrequest विस्तारित अनुरोध {
निजी अंतिम प्रतिक्रिया। Listener Mlistener;
निजी अंतिम प्रतिक्रिया।
निजी अंतिम नक्शा mheaders;
निजी अंतिम स्ट्रिंग mmimetype;
निजी अंतिम बाइट [] mmultipartbody;
सार्वजनिक volleymultipartrequest (int विधि, स्ट्रिंग URL, response.Listener श्रोता,
Response.errorlistener errorListener) {
सुपर (विधि, URL, ERRORLISTENER);
this.mlistener = श्रोता;
this.merrorlistener = errorListener;
this.mheaders = null;
this.mmimetype = null;
this.mmultipartbody = null;
}
सार्वजनिक volleymultipartrequest (स्ट्रिंग URL, मैप हेडर, स्ट्रिंग mimetype, बाइट [] मल्टीपार्टबॉडी,
Response.Listener श्रोता, response.errorlistener errorListener) {
सुपर (Method.Post, URL, ERRORLISTENER);
this.mlistener = श्रोता;
this.merrorlistener = errorListener;
this.mheaders = हेडर;
this.mmimetype = mimetype;
this.mmultipartbody = multivartbody;
}
@Override
सार्वजनिक नक्शा गेथेडर्स () थ्रो ऑफ़फेल्योररर {
वापसी (mheaders! = null)? mheaders: super.getheaders ();
}
@Override
सार्वजनिक स्ट्रिंग getBodyContentType () {
मिमीमेटाइप लौटें;
}
@Override
सार्वजनिक बाइट [] getBody () थ्रो ऑफ़फेल्योररर {
Mmultipartbody लौटें;
}
@Override
संरक्षित प्रतिक्रिया ParsenetWorkResponse (NetworkResponse प्रतिक्रिया) {
कोशिश {
वापसी प्रतिक्रिया। success (
प्रतिक्रिया,
Httpheaderparser.parsecacheaheaders (प्रतिक्रिया));
} पकड़ (अपवाद ई) {
वापसी प्रतिक्रिया।
}
}
@Override
संरक्षित शून्य deliverResponse (networkresponse प्रतिक्रिया) {
Mlistener.onResponse (प्रतिक्रिया);
}
@Override
पब्लिक शून्य डिलीवरर (वॉलीरोर एरर) {
merrorlistener.onerrorresponse (त्रुटि);
}
सार्वजनिक स्थैतिक मानचित्र createmultipartrequestParts (मानचित्र params, मानचित्र डेटा) {
मैप मल्टीपार्टपरम्स = नया हैशमैप ();
for (map.entry प्रविष्टि: params.entryset ()) {
multicartparams.put (antrice.getkey (), नया DataPart (Antray.getValue ()));
}
for (map.entry प्रविष्टि: data.entryset ()) {
multionartparams.put (antrice.getkey (), antrice.getValue ());
}
मल्टीपार्टपरम लौटें;
}
सार्वजनिक स्थैतिक बाइट [] createmultipartbody (मानचित्र डेटा, स्ट्रिंग सीमा) ioException {
BytearrayoutputStream Bos = नया BytearRayOutputStream ();
DataOutputStream DOS = नया DataOutputStream (BOS);
for (map.entry प्रविष्टि: data.entryset ()) {
BuildTextPart (डॉस, एंट्री.गेटकी (), एंट्री.गेटवेल्यू ()। getContentType (), एंट्री.गेटवेल्यू ()
}