android volley 上传图片 和参数,Android使用Volley实现上传文件功能
一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下
/**
* Created by wangshihui on 2015/11/30.
* 上传文件
* url:.....
method:post
参数:file
接口给的参数:file 就是表单的key,传给mFilePartName;
这是个测试类,测试上传头像没有问题,适合只上传单个文件的场景
*/
public class MultipartRequest extends Request {
private String mHeader;
private Map mMap;
private String cookieFromResp = "";
private Map headerMap = new HashMap<>();
private MultipartEntity entity = new MultipartEntity();
private final Response.Listener mListener;
private final File mFilePart;
private String mFilePartName;
/**
* @param url
* @param listener
* @param errorListener
* @param file_name
* @param file
*/
public MultipartRequest(String url, Response.Listener listener, Response.ErrorListener errorListener, String file_name,File file)
{
super(Method.POST, url, errorListener);
mListener = listener;
mFilePart = file;
mFilePartName=file_name;
buildMultipartEntity();
}
/**
* 添加文件参数
*/
private void buildMultipartEntity()
{
entity.addPart(mFilePartName, new FileBody(mFilePart));
}
@Override
public String getBodyContentType()
{
return entity.getContentType().getValue();
}
@Override
public byte[] getBody() throws AuthFailureError
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try
{
entity.writeTo(bos);
}
catch (IOException e)
{
VolleyLog.e("IOException writing to ByteArrayOutputStream");
}
return bos.toByteArray();
}
/**
* @param response
* @return
*/
@Override
protected Response parseNetworkResponse(NetworkResponse response)
{
try {
JSONObject jsonObject;
System.out.println(response.headers.toString());
if (response.data.length != 0) {
String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
jsonObject = new JSONObject(jsonString);
} else {
jsonObject = new JSONObject();
}
//获取数据头
mHeader = response.headers.toString();
//提取Cookie(JSESSIONID)
Pattern pattern = Pattern.compile("Set-Cookie=.*?;");
Matcher matcher = pattern.matcher(mHeader);
if (matcher.find()) {
cookieFromResp = matcher.group();
cookieFromResp = cookieFromResp.substring(11, cookieFromResp.length() - 1);
System.out.println("Cookie: " + cookieFromResp);
}
jsonObject.put("Cookie", cookieFromResp);
return Response.success(jsonObject,
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
/**
* @param response
*/
@Override
protected void deliverResponse(JSONObject response)
{
mListener.onResponse(response);
}
@Override
protected Map getParams() throws AuthFailureError {
return mMap;
}
/**
* @return
* @throws AuthFailureError
*/
@Override
public Map getHeaders() throws AuthFailureError {
return headerMap;
}
/**
* @return
*/
@Override
public RetryPolicy getRetryPolicy() {
RetryPolicy retryPolicy = new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
return retryPolicy;
}
/**
* @param cookie
*/
//将Cookie加入数据头
public void setSendCookie(String cookie) {
headerMap.put("Cookie", cookie);
}
}
调用方法如下:
//指定url路径
String url = "http://182.92.....";
MultipartRequest multipartRequest = new MultipartRequest(
url, new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
saveSessionID(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
Log.e(TAG, e.getMessage(), e);
try {
byte[] htmlBodyBytes = e.networkResponse.data;
Log.e(TAG, new String(htmlBodyBytes), e);
} catch (Exception e1) {
e1.printStackTrace();
}
ToastUtil.showShortToast(UserCenterActivity.this, "网络连接异常");
}
}, "file", mSelectedPictureFile);
multipartRequest.setSendCookie(loadSessionID());
multipartRequest.setTag(TAG);
client.addTask(multipartRequest);
private File mSelectedPictureFile;
mSelectedPictureFile是一个File文件,参数名是file
通信成功保存Cookie
saveSessionID(response);
发送请求上传cookie
multipartRequest.setSendCookie(loadSessionID());
client是一个Volley的简单封装
protected AsynHttpClient client;
public class AsynHttpClient {
//volley的请求队列
private RequestQueue requestQueue;
//保证全局变量是单一的
private static AsynHttpClient instance;
private Context mContext;
private AsynHttpClient(Context context) {
requestQueue = Volley.newRequestQueue(context);
this.mContext = context;
}
/**
* 单列模式,让AsynHttpClient在整个项目中保持只有一个
* @param context
* @return
*/
public static AsynHttpClient getInstance(Context context) {
if (instance==null){
synchronized (AsynHttpClient.class){
if (instance==null){
instance=new AsynHttpClient(context);
}
}
}
return instance;
}
/**
* 添加任务到volley的请求队列中去,并不会立即执行
* @param task
*/
public void addTask(Request task){
requestQueue.add(task);
}
public RequestQueue getRequestQueue() {
return requestQueue;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android volley 上传图片 和参数,Android使用Volley实现上传文件功能相关推荐
- android volley 上传图片 和参数,android Volley 上传文件上传图片
android volley 实现上传文件功能 Volley不解释了吧, android 官方的一个网络请求库. 源代码的地址在: git@github.com:com314159/VolleyMul ...
- android volley 上传图片 和参数,Android使用Volley上传文件
一个项目中用到的使用Volley上传头像文件的例子 /** * Created by wangshihui on 2015/11/30. * 上传文件 * url:..... method:post ...
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
折腾了好几天的 HTTP 终于搞定了,经测试正常,不过是初步用例测试用的,因为后面还要修改先把当前版本保存在博客里吧. 其中POST因为涉及多段上传需要导入两个包文件,我用的是最新的 httpmine ...
- vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...
vue+axios+php如何实现上传文件功能?Vue Axios PHP如何实现上传文件的功能?, 推荐:<PHP视频教程> 当我们提交表单时,我们经常会遇到一些表单提交要求.vue的a ...
- android requestparams传入对象,Android xutils3上传文件使用示例
Android xutils3工具上传文件非常方便,只需要传入File文件数据或一些其它参数给RequestParams对象即可完成,现在我们来开始使用xutils工具上传文件吧! 步骤一:需要在项目 ...
- android里面通过scp上传文件
我网上搜索了到使用ganymed-ssh2-build210.jar来实现scp上传文件功能.我就不说具体的方法了.有些网友比我还认真写文档,写的比我漂亮多了. 问题一: 使用的时候,我发现总是连不上 ...
- android multipartentity 怎么上传参数,android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b...
android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b 短版本-.jar已弃用,其升级版本java.lang.NoClassDefFoundError在 ...
- Android上传文件到服务器500,使用WebUploader解决安卓微信浏览器上传图片中遇到的bug...
摘自个人博客:走啊走的记录,欢迎点击查看,效果更佳! 微信浏览器上传图片bug的原因 微信在新版本中采用的是自己的X5内核浏览器,而在较老的版本中还有可能是安卓的原生浏览器.具体的环境我也不太了解,但 ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
最新文章
- 这个口罩小朋友戴上就不肯脱!真相原来是这样!
- ActiveMQ集群
- jQuery easyUI--tabs选项卡面板
- linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
- 关于SQLserver 的windows验证
- C/C++线程基本函数
- 前端学习(83):按显示进行分类
- 前端大神的离逝,让我们不得不有所反思。
- OK6410裸机调试
- bomb android实战,android 仿qq app源码下载(bmob)
- 商家 APP 如何接入新版支付宝支付,老版本商家如何升级
- memcached 内存管理 分析(转)
- How to install innotop and percona tookit on centos
- JMX监测JVM报错
- [erlang]一次erlcron崩溃引起的事故分析
- tomcat 日志配置
- 基于有限元法的转子动力学建模---Timoshenko梁单元有限元建模
- 怎么彻底粉碎文件夹?文件还能恢复吗?操作过程在这里
- 斐讯k2路由器刷pandorabox认证哆点Drcom
- 对数函数log()用法
热门文章
- matlab解调2fsk,2FSK调制解调系统的MATLAB实现
- CF1251F Red-White Fence(多项式/背包问题/组合数学)
- Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
- Codeforces Round #305 (Div. 1) D. Mike and Fish 欧拉回路
- E - Flow Gym - 102471E
- Knowledge is Power Gym - 102822K
- ssl提高组周六备考赛【2018.10.27】
- 初一模拟赛总结(2019.6.1)
- CF1120D Power Tree(树形DP/构造+差分+最小生成树)
- [系统安全]使用OD编写连连看外挂