[2一個常見的任務。雖然較新的API版本中不再可用httpentity,但仍有一些方法可以使用凌空請求。
創建一個基本的倍增請求
mmultipartbody;
//構造函數
public Multipartrequest(字符串URL,MAP 標題,字符串MimeType,byte [] Multipartbody,
wendys.listener 偵聽器,響應。 erlistenererrorListener){
super(method.post,url,errorListener);
this.mlistener =偵聽器;
this.merrorlistener = errorListener;
this.mheaders =標題;
this.mmimetype = mimeType;
this.mmultipartbody = multipartbody;
}
//獲取器和固定器
//覆蓋Getheaders()如果您需要添加自定義標題
@Override
公共地圖 getheaders()拋出authfailureError {
返回(mheaders!= null)? mheaders:super.getheaders();
}
// Override getBodyContentType()為Multipart請求設置正確的MIME類型
@Override
public String getBodyContentType(){
返回mmimetype;
}
//覆蓋getbody()返回多部分主體
@Override
public byte [] getbody()拋出authfailureError {
返回mmultipartbody;
}
//覆蓋parsenetworkresponse()以將響應作為網絡響應解析
@Override
受保護的響應 ParsenetworkResponse(NetworkResponse響應){
嘗試 {
返迴響應。
回覆,
httpheaderparser.parsecacheheaders(響應));
} catch(異常E){
返迴響應。 ERROR(新的Parseerror(e));
}
}
//提供響應和錯誤
@Override
受保護的void deliverResponse(網絡響應響應){
mlistener.onresponse(響應);
}
@Override
公共void deliverror(射線錯誤錯誤){
merrlistener.onerrorresponse(error);
}
}
構建Multipart Body
;
ByTearRayOutputStream bos = new ByTearRayOutputStream();
dataOutputStream dos = new DataOutputStream(BOS);
嘗試 {
//文本數據
BuildTextPart(dos,“ name”,“ John Doe”);
buildTextPart(dos,“電子郵件”,“ [email protected]”);
//圖像數據
bitmap imagebitmap = bitmapfactory.decoderesource(context.getResources(),r.drawable.my_image);
buildImagePart(dos,“ image”,imageBitMap);
} catch(ioexception e){
e.printstacktrace();
}
multipartbody = bos.tobytearray(); 在request
將文本數據添加到請求
導入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.io.dataoutputstream;
導入java.io.ioexception;
導入java.util.hashmap;
導入java.util.map;
公共類Volleymultipartrequest擴展了請求 {
私人最終響應。 listener mlistener;
私人最終響應。
私有最終地圖 mheaders;
私有最終字符串mmimetype;
私人最終字節[] mmultipartbody;
public oulymultipartrequest(int方法,字符串url,wendesp.listener 偵聽器,
wendmes.Erlistener errorListener){
super(方法,URL,errorListener);
this.mlistener =偵聽器;
this.merrorlistener = errorListener;
this.mheaders = null;
this.mmimetype = null;
this.mmultipartbody = null;
}
public vulleymultipartrequest(字符串URL,MAP 標題,字符串Mimetype,byte [] Multipartbody,
wendys.listener 偵聽器,響應。 erlistenererrorListener){
super(method.post,url,errorListener);
this.mlistener =偵聽器;
this.merrorlistener = errorListener;
this.mheaders =標題;
this.mmimetype = mimeType;
this.mmultipartbody = multipartbody;
}
@Override
公共地圖 getheaders()拋出authfailureError {
返回(mheaders!= null)? mheaders:super.getheaders();
}
@Override
public String getBodyContentType(){
返回mmimetype;
}
@Override
public byte [] getbody()拋出authfailureError {
返回mmultipartbody;
}
@Override
受保護的響應 ParsenetworkResponse(NetworkResponse響應){
嘗試 {
返迴響應。
回覆,
httpheaderparser.parsecacheheaders(響應));
} catch(異常E){
返迴響應。 ERROR(新的Parseerror(e));
}
}
@Override
受保護的void deliverResponse(網絡響應響應){
mlistener.onresponse(響應);
}
@Override
公共void deliverror(射線錯誤錯誤){
merrlistener.onerrorresponse(error);
}
公共靜態映射 createMultipartrequestParts(Map params,Map Data){
MAP MultipartParams = new Hashmap ();
for(map.entry entry:params.entryset()){
MultiPartParams.put(entry.getKey(),new DataPart(entry.getValue()));
}
for(map.entry entry:data.entryset()){
MultipartParams.put(entry.getKey(),entry.getValue());
}
返回多派克拉姆;
}
public static byte [] createMultipartBody(映射 data,string boundare)拋出ioexception {
ByTearRayOutputStream bos = new ByTearRayOutputStream();
dataOutputStream dos = new DataOutputStream(BOS);
for(map.entry entry:data.entryset()){
buildTextPart(dos,entry.getKey(),entry.getValue()。getContentType(),entry.getValue()。getFilename(),entry.getValue()。getData()。
}