之前需求用到多张图片上传,在网上搜了一下,发现都是原生API的上传,之前也使用了Retrofit的
RequestBody.create(MediaType.parse("multipart/form-data"), file)实现上传图片但是发现不好用,扩展性差(PS:可能是我用的不好哈),我的代码中用到了xutils的注解模块,就想使用网络模块来实现。
准备工作
在build.gradle里面加入xutils包依赖
compile 'org.xutils:xutils:3+'
注册xutils(最好是在Application的OnCreate)
//xutils的初始化 x.Ext.init(this);
核心代码
自己在合适位置进行日志打印
/** * @param callback 回调接口,通知UI线程更新UI * @param param 可变参数,可以理解为数组 * */ public void upLaodImg(final AsyncCallback callback, final String... param) { RequestParams params=new RequestParams(URL);//参数是路径地址 List<KeyValue> list = new ArrayList<>(); for (int i=6;i<list.size();i++){//遍历图片,我传的图片为下标6开始的位置 try { list.add(new KeyValue("multiparts"//图片数组,或者单个图片的上传参数名 ,new File(param[i])));//这个参数取出来是图片在手机里的地址 }catch (Exception e){} } list.add(new KeyValue("Title", param[1])); list.add(new KeyValue("Content", param[2])); list.add(new KeyValue("orderType", param[0])); list.add(new KeyValue("Address", param[3])); list.add(new KeyValue("TxnAmt", param[4])); list.add(new KeyValue("moblNo", param[5])); list.add(new KeyValue("userId", MyApp.userId)); //设置编码格式为UTF-8,保证参数不乱码 MultipartBody body = new MultipartBody(list, "UTF-8"); params.setRequestBody(body); x.http().post(params,new Callback.CommonCallback<String>(){ public void onSuccess(String result) { try { JSONObject jsonObject=new JSONObject(result); if (jsonObject.getString("code").equals("0")){ callback.onSuccess(jsonObject.getString("message")); }else { callback.onError(jsonObject.getString("message")); } } catch (JSONException e) { e.printStackTrace(); } } public void onError(Throwable ex, boolean isOnCallback) { callback.onError("错误"); } public void onCancelled(CancelledException cex) { } public void onFinished() { } });