最新のAPI
を使用してボレーでのマルチパート要求を使用して、ファイルやテキストデータのアップロードなどのマルチパートリクエストを送信します。一般的なタスク。 Httpentityは新しいAPIバージョンでは利用できなくなりましたが、Volleyを使用してマルチパート要求を達成する方法はまだあります。
、次のようなVolleyのリクエストクラスを拡張できます。
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をインポートします。
クラスMultiPartRequest拡張リクエスト
マルチパートボディ
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を構築するマルチパートボディを構築するには、次の手順を使用できます。 0]; bytearrayoutputStream bos = new bytearrayoutputStream(); dataoutputStream dos = new DataOutputStream(BOS); 試す { //テキストデータ BuildTextPart(dos、 "name"、 "John Doe"); 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();{ // 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); } }
リクエストのマルチパート本体を含む
マルチパート本体が構築されたら、マルチパートトレートのインスタンスに含めることができます。 :
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 Requestmultipartrequest request = new MultiPartRequest( 「my_url」、 null、//ヘッダー 「MultiPart/Form-Data」、 MultiPartBody、 new Response.listener{ // 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); } }
2つのHyphen、境界、およびLineEndをコードから適切な値に置き換えます。 BolleyMultipartRequestクラスの実装:
Import 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をインポートします。 Public Class BolleyMultiPartRequest拡張リクエスト免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3