]
Рабочий пост -запрос Multipart с Volley с использованием последнего API
в разработке Android, отправка многочисленных запросов, таких как загрузка файлов и текстовые данные, есть общая задача. В то время как httpentity больше не доступна в новых версиях API, все еще существуют способы получения многопоточных запросов с использованием Volley.
создание основного многоупомянутого запроса
для создания Multipart Request , мы можем расширить класс запросов Volley, как SO:
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); 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();; BytearrayOutputStream Bos = new BytearRayOutputStream (); DataOutputStream dos = new DataOutputStream (BOS); пытаться { // текстовые данные BuildTextPart (DOS, «Имя», «Джон Доу»); BuildTextPart (dos, "Email", "[email protected]"); // данные изображения Bitmap imagebitmap = bitmapfactory.decoderesource (context.getresources (), r.drawable.my_image); BuildImagePart (DOS, «Image», ImageBitmap); } catch (ioException e) { e.printstacktrace (); } multipartbody = bos.tobytearray ();
, включая корпус, в запросе
, как только корпус многопорядка построен, мы можем включить его в наш Multipartrteaste, как ::
MultipartRequest request = new MultipartRequest( "my_url", null, // Headers "multipart/form-data", multipartBody, new Response.ListenerMultipartRtequest Queck = new MultipartRequest ( "my_url", NULL, // заголовки "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 } });
Добавление текстовых данных в запрос
В дополнение к данным изображения, вы также можете включить текстовые данные в свой запрос:
MultipartRequest request = new MultipartRequest( "my_url", null, // Headers "multipart/form-data", multipartBody, new Response.Listenerprivate void buildTextPart (DataOutputStream DataOutputStream, String name, строка значения) Throws IOException { DataOutputStream.WriteBytes (двагифенский граничный линий); DATEOUTPUTSTREAM.WRITEBYTES ("Disposition: Form-Data; name = \" "name" \ "" lineend); DataOutputStream.WriteBytes (Lineend); DataOutputStream.WriteBytes (значение); DataOutputStream.WriteBytes (Lineend); }() { @Override public void onResponse(NetworkResponse response) { // Handle response } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Handle error } });
заменить двагифен, границу и lineend с соответствующими значениями из вашего кода.
Полный код образец
следующий пример кода показывает полный модульный реализация класса VolleyMultiparTrequest:
MultipartRequest request = new MultipartRequest( "my_url", null, // Headers "multipart/form-data", multipartBody, new Response.Listenerимпорт com.android.volley.authfailureError; Импорт com.android.volley.networkresponse; Импорт com.android.volley.parseerror; импорт com.android.volley.request; импорт com.android.volley.response; Импорт com.android.volley.volleyerror; Import com.android.volley.toolbox.httpheaderparser; импортировать java.io.bytearrayoutputstream; импортировать java.io.dataoutputstream; импортировать java.io.ioexception; импортировать java.util.hashmap; импортировать java.util.map; Public Class VolleyMultiPartRequest Extends Request() { @Override public void onResponse(NetworkResponse response) { // Handle response } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Handle error } });
]
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3