Postagem de funcionamento Solicitação multipart com voley usando a API mais recente
no desenvolvimento do Android, enviando solicitações de múltiplas, como o upload de arquivos e dados de texto, é uma tarefa comum. Embora o httpentity não esteja mais disponível em versões mais recentes da API, ainda existem maneiras de atingir solicitações multipartidas usando o voley. , podemos estender a classe de solicitação do voley como assim:
import com.android.volley.authfailureError;
importação com.android.volley.networkResponse;
importação com.android.volley.parseerror;
importação com.android.volley.request;
importação com.android.volley.Response;
importação com.android.volley.volleyError;
import com.android.volley.toolbox.httpheaderParser;
importar java.util.map;
classe multipartrequest estende a solicitação
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); tentar { // dados de texto BuildTextPart (DOS, "Nome", "John Doe"); BuildTextPart (DOS, "Email", "[email protected]"); // dados de imagem Bitmap imageBitmap = bitmapFactory.DecODeRESource (context.getResources (), r.Drawable.my_image); BuildImagePart (DOS, "Image", ImageBitmap); } catch (ioexception e) { E.PrintStackTrace (); } Multipartbody = bos.tobytearray ();
incluindo o corpo multipartido no pedido:] "my_url", nulo, // cabeçalhos "Multipart/Form-Data", Multipartbody, new Response.Listener
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();
Adicionando dados de texto ao request
Além dos dados da imagem, você também pode incluir dados de texto em sua solicitação:privado void BuildTextPart (DataOutputStream DataOutputStream, Nome da String, String Value) lança IoException { DataOutputStream.WriteBytes (Linha de limite de dois hifes); DataOutputStream.WriteBytes ("Content-Disposition: Form-Data; nome = \" "Nome" \ "" Lineend); dataOutputStream.WriteBytes (LineEND); dataOutputStream.WriteBytes (valor); dataOutputStream.WriteBytes (LineEND); }
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();Substitua dois hifes, limites e alinhamentos com os valores apropriados do seu código. implementação de uma classe volleymultiparTeCest:
import com.android.volley.authfailureError;
importação com.android.volley.networkResponse;
importação com.android.volley.parseerror;
importação com.android.volley.request;
importação com.android.volley.Response;
importação com.android.volley.volleyError;
import com.android.volley.toolbox.httpheaderParser;
importar java.io.byteArrayOutputStream;
importar java.io.dataOutputStream;
importar java.io.ioException;
importar java.util.hashmap;
importar java.util.map;
Classe pública volleymultiparTreCest estende a solicitação
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3