Publier la demande multipart avec volley en utilisant la dernière API
dans Android Development, envoyant des demandes de multipart, telles que le téléchargement de fichiers et de données texte, est une tâche commune. Bien que Httpentity ne soit plus disponible dans les versions API plus récentes, il existe encore des moyens d'atteindre les demandes en multipar , nous pouvons étendre la classe de demande de Volley comme ainsi:
import com.android.volley.authFailureError;
import com.android.volley.networkResponse;
import com.android.volley.parseerror;
import com.android.volley.request;
import com.android.volley.Response;
Import com.android.volley.volleyerror;
import com.android.volley.toolbox.httpheaderParser;
importation java.util.map;
Class MultipartReQuest étend la demande
import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.ParseError; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.HttpHeaderParser; import java.util.Map; class MultipartRequest extends Request{ // Listener for request response private final Response.Listener mListener; // Listener for request error private final Response.ErrorListener mErrorListener; // Request headers private final Map mHeaders; // Multipart mime type (e.g., "multipart/form-data; boundary=XXX") private final String mMimeType; // Request body as multipart private final byte[] mMultipartBody; // Constructor public MultipartRequest(String url, Map headers, String mimeType, byte[] multipartBody, Response.Listener listener, Response.ErrorListener errorListener) { super(Method.POST, url, errorListener); this.mListener = listener; this.mErrorListener = errorListener; this.mHeaders = headers; this.mMimeType = mimeType; this.mMultipartBody = multipartBody; } // Getters and setters // Override getHeaders() if you need to add custom headers @Override public Map getHeaders() throws AuthFailureError { return (mHeaders != null) ? mHeaders : super.getHeaders(); } // Override getBodyContentType() to set the correct mime type for the multipart request @Override public String getBodyContentType() { return mMimeType; } // Override getBody() to return the multipart body @Override public byte[] getBody() throws AuthFailureError { return mMultipartBody; } // Override parseNetworkResponse() to parse the response as a NetworkResponse @Override protected Response parseNetworkResponse(NetworkResponse response) { try { return Response.success( response, HttpHeaderParser.parseCacheHeaders(response)); } catch (Exception e) { return Response.error(new ParseError(e)); } } // Delivering response and error @Override protected void deliverResponse(NetworkResponse response) { mListener.onResponse(response); } @Override public void deliverError(VolleyError error) { mErrorListener.onErrorResponse(error); } }
byte [] multipartBody = new Byte [ 0]; BytearrayoutputStream bos = new bytearrayoutputStream (); DataOutputStream DOS = new DataOutputStream (BOS); essayer { // Données de texte buildTextPart (dos, "nom", "John Doe"); buildTextPart (dos, "email", "[email protected]"); // Données d'image Bitmap imagebitmap = bitmapfactory.decodeResource (context.getResources (), r.drawable.my_image); BuildImagePart (dos, "image", imagebitmap); } catch (ioexception e) { e.printStackTrace (); } multipartBody = bos.ToByTearray ();
y compris le corps multipart dans la demande
byte[] multipartBody = new byte[0]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); try { // Text data buildTextPart(dos, "name", "John Doe"); buildTextPart(dos, "email", "[email protected]"); // Image data Bitmap imageBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_image); buildImagePart(dos, "image", imageBitmap); } catch (IOException e) { e.printStackTrace(); } multipartBody = bos.toByteArray();
MultipartReQuest request = new MultipartReQuest (
"my_url",
en-têtes nuls, //
"Multipart / Form-Data",
Multipartbody,
new Response.Listener
MultipartRequest request = new MultipartRequest( "my_url", null, // Headers "multipart/form-data", multipartBody, new Response.Listener() { @Override public void onResponse(NetworkResponse response) { // Handle response } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Handle error } });
privé void buildTextPart (dataOutputStream dataOutputStream, nom de chaîne, valeur de chaîne) lève ioException { DataOutputStream.WriteBytes (TwoHyphens Boundary Lineend); dataOutputStream.WriteBytes ("Content-Disposition: form-data; name = \" "name" \ "" lineend); dataOutputStream.WriteBytes (lineend); dataOutputStream.WriteBytes (valeur); dataOutputStream.WriteBytes (lineend); } Remplacez les deuxhyphens, la limite et la ligne avec des valeurs appropriées de votre code. Implémentation d'une classe VolleyMultipArtReQuest:
import com.android.volley.authFailureError;
import com.android.volley.networkResponse;
import com.android.volley.parseerror;
import com.android.volley.request;
import com.android.volley.Response;
Import com.android.volley.volleyerror;
import com.android.volley.toolbox.httpheaderParser;
Importer java.io.ByteArrayOutputStream;
import java.io.dataOutputStream;
Importer java.io.ioException;
import java.util.hashmap;
importation java.util.map;
classe publique VolleyMultipArtReQuest étend la demande
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3