Volley

Wesley13
• 阅读 632

OkHttp可以作为Volley底层传输协议,速度更快,传大量图片建议使用。OkHttp更多功能请看**OkHttp的使用**

xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...

xUtils一共有4大功能:注解模块,网络模块,图片加载模块,数据库模块。相关请看**xUtils框架的使用**博客

使用Volley上传,猪哟是继承volley的Request类,然后通过使用httpmim的MultipartEntity类对文件参数进行封装。

Volley更多功能请看**Volley框架使用**

所需的jar包:

httpclient-4.3.5.jarandroid-async-http-1.4.4.jar

httpcore-4.3.2.jar,        httpmime-4.3.5

okhttp.jarokio.jarvolley.jarxUtils-2.6.2.jar

OkHttp代码:

private static final Handler handler = new Handler(Looper.getMainLooper());  
  
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*");  
  
private static final OkHttpClient client = new OkHttpClient.Builder()  
        .addInterceptor(new Interceptor() {  
            @Override  
            public Response intercept(Chain chain) throws IOException {  
                okhttp3.Request request = chain.request().newBuilder()  
                        .build();  
                return chain.proceed(request);  
            }  
        }).readTimeout(15, TimeUnit.SECONDS)// 设置读取超时时间  
        .writeTimeout(15, TimeUnit.SECONDS)// 设置写的超时时间  
        .connectTimeout(15, TimeUnit.SECONDS)// 设置连接超时时间  
        .build();  
  
// 上传图片公有方法  
private final static void uploadImgAndParameter(Map<String, Object> map,  
        String url) {  
  
    // mImgUrls为存放图片的url集合  
    MultipartBody.Builder builder = new MultipartBody.Builder()  
            .setType(MultipartBody.FORM);  
  
    if (null != map) {  
        for (Map.Entry<String, Object> entry : map.entrySet()) {  
            if (entry.getValue() != null) {  
                if (entry.getValue() instanceof File) {  
                    File f = (File) entry.getValue();  
                    builder.addFormDataPart(entry.getKey(), f.getName(),  
                            RequestBody.create(MEDIA_TYPE_PNG, f));  
                } else {  
                    builder.addFormDataPart(entry.getKey(), entry  
                            .getValue().toString());  
                }  
            }  
  
        }  
    }  
    // 创建RequestBody  
    RequestBody body = builder.build();  
    final okhttp3.Request request = new okhttp3.Request.Builder().url(url)// 地址  
            .post(body)// 添加请求体  
            .build();  
    client.newCall(request).enqueue(new okhttp3.Callback() {  
  
        @Override  
        public void onResponse(Call call, final Response response)  
                throws IOException {  
            final String data = response.body().string();  
            Log.i(TAG, "上传照片成功-->" + data);  
            call.cancel();// 上传成功取消请求释放内存  
        }  
  
        @Override  
        public void onFailure(Call call, final IOException e) {  
            Log.i(TAG, "上传失败-->" + e.getMessage());  
            call.cancel();// 上传失败取消请求释放内存  
        }  
  
    });  
  
} 

XUtils:

HttpUtils http = new HttpUtils();  
        RequestParams params = new RequestParams();  
        params.addBodyParameter("c", "comment");  
        params.addBodyParameter("a", "add");  
        params.addBodyParameter("uid", "1000191");  
        params.addBodyParameter("dataid", "1114");  
        params.addBodyParameter("message", "你好");  
        params.addBodyParameter("datatype", "goodsid");  
        for (int i = 0; i < 2; i++) {  
            params.addBodyParameter("filedata" + i, file[i]);  
        }  
        http.send(HttpRequest.HttpMethod.POST, url, params,  
                new RequestCallBack<String>() {  
  
                    @Override  
                    public void onFailure(HttpException arg0, String arg1) {  
  
                    }  
  
                    @Override  
                    public void onSuccess(ResponseInfo<String> arg0) {  
                        Log.i(TAG, arg0.result.toString());  
                    }  
  
                });  

Volley:

public static void addPutUploadFileRequest(final Map<String, File> files,  
            final Map<String, String> params,  
            final Listener<String> responseListener,  
            final ErrorListener errorListener) {  
        if (null == url || null == responseListener) {  
            return;  
        }  
  
        MultiPartStringRequest multiPartRequest = new MultiPartStringRequest(  
                Request.Method.POST, url, responseListener, errorListener) {  
  
            @Override  
            public Map<String, File> getFileUploads() {  
                return files;  
            }  
  
            @Override  
            public Map<String, String> getStringUploads() {  
                return params;  
            }  
  
        };  
  
        mSingleQueue.add(multiPartRequest);  
    }  
  
    Listener<JSONObject> mResonseListener = new Listener<JSONObject>() {  
  
        @Override  
        public void onResponse(JSONObject response) {  
            Log.i(TAG + "1", response.toString());  
        }  
    };  
  
    Listener<String> mResonseListenerString = new Listener<String>() {  
  
        @Override  
        public void onResponse(String response) {  
            Log.i(TAG + "2", response.toString());  
        }  
    };  
  
    ErrorListener mErrorListener = new ErrorListener() {  
  
        @Override  
        public void onErrorResponse(VolleyError error) {  
            if (error != null) {  
                if (error.networkResponse != null)  
                    Log.i(TAG + "3", " error "  
                            + new String(error.networkResponse.data));  
            }  
        }  
    };  

不要忘记在AndroidManifest.xml加权限哦!

 <uses-permissionandroid:name="android.permission.INTERNET"/>

 <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

本人测试全部成功了的

由于代码太多,完整代码未给出,源码直接下载即可

源码点击下载:  https://github.com/DickyQie/android-picture-upload

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这