[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()。
}