*封装RetrofitManager

public class RetrofitManager {    private static RetrofitManager retrofitManager;    private Retrofit retrofit;    private RetrofitManager() {}// 使用单例模式封装    public static RetrofitManager getInstance() {        if (retrofitManager == null) {            synchronized (RetrofitManager.class) {                if (retrofitManager == null) {                    retrofitManager = new RetrofitManager();                }            }        }        return retrofitManager;    }    public Retrofit getRetrofit() {        if (retrofit == null) {        // 添加日志拦截器            HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();            // 拦截等级为body(可以打印出完整的网络请求)            httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY);// 使用OkHttpClient            OkHttpClient okHttpClient = new OkHttpClient.Builder()                    .addInterceptor(httpLoggingInterceptor)                    .connectTimeout(1, TimeUnit.MINUTES)                    .readTimeout(1,TimeUnit.MINUTES)                    .build();// 创建出Retrofit            retrofit = new Retrofit.Builder()             // 使用Gson转换工厂                    .addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create())// 基础Url                    .baseUrl("http://172.81.227.127:8088/")                    .client(okHttpClient)                    .build();        }        return retrofit;    }}

使用Body级别的日志拦截器效果图,可以清晰看出请求方式、接口地址、入参、返回数据等

一、上传单一文件

1.在Api接口中声明方法
@Multipart@POST("fileUpload")Observable<String> upload(@Part List<MultipartBody.Part> parts);
2.实例化api接口
// 实例化api接口Api api = RetrofitManager.getInstance().getRetrofit().create(Api.class);
3.构建参数
File file = new File("/sdcard/DCIM/Camera/IMG_20191121_010329.jpg");RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody multipartBody = new MultipartBody.Builder()                .addFormDataPart("file", "IMG.jpg", body)                .setType(MultipartBody.FORM)                .build();
4.提交请求
api.upload(parts)                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Observer<String>() {                    @Override                    public void onNext(String s) {                        Log.i("--",s); // 请求结果                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onComplete() {                    }                });

二、上传多个文件

1.在Api接口中声明方法
@Multipart@POST("fileUploadMore")Observable<String> uploadMore(@PartMap Map<String, List<MultipartBody.Part>> multiMap);
2.实例化api接口
// 实例化api接口Api api = RetrofitManager.getInstance().getRetrofit().create(Api.class);
3.构建参数
File file = new File("/sdcard/DCIM/Camera/IMG_20191121_010329.jpg");RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);MultipartBody multipartBody1 = new MultipartBody.Builder()                .addFormDataPart("file", "sss1.jpg", body)                .setType(MultipartBody.FORM)                .build();MultipartBody multipartBody2 = new MultipartBody.Builder()                .addFormDataPart("file", "sss2.jpg", body)                .setType(MultipartBody.FORM)                .build();MultipartBody multipartBody3 = new MultipartBody.Builder()                .addFormDataPart("file", "sss3.jpg", body)                .setType(MultipartBody.FORM)                .build();MultipartBody multipartBody4 = new MultipartBody.Builder()                .addFormDataPart("file", "sss4.jpg", body)                .setType(MultipartBody.FORM)                .build();// 把所有文件放入map集合中Map<String, List<MultipartBody.Part>> parts = new HashMap<>();parts.put("f1",multipartBody1.parts());parts.put("f2",multipartBody2.parts());parts.put("f3",multipartBody3.parts());parts.put("f4",multipartBody4.parts());
4.提交请求
api.uploadMore(parts)                .observeOn(AndroidSchedulers.mainThread())                .subscribeOn(Schedulers.io())                .subscribe(new Observer<String>() {                    @Override                    public void onNext(String s) {                        Log.i("--",s); // 请求结果                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onComplete() {                    }                });

更多相关文章

  1. android语音识别之科大讯飞语音API的使用
  2. 【Android】Http请求
  3. Android(安卓)增量更新实例
  4. Android(安卓)Activity的生命周期及四种启动模式的联合研究
  5. android UI控件之webview控件使用实例:加载网页到webview中
  6. Android(安卓)Post方法请求URL 迭代器
  7. Android使用Volloy进行JsonObjectRequest请求
  8. android一个简单的线程实例
  9. Android图片上传的工具类

随机推荐

  1. Android中ExpandableListView的用法实例
  2. Android Application详解
  3. android Binder 工作流程
  4. adb push常见问题
  5. android Activity區域監聽
  6. android ip地址,手机号码,邮箱格式验证
  7. Android各个版本API的差异
  8. 模仿android新浪微博手机客户端项目
  9. Android——检测TXT文件中是否含有双字节
  10. Android(安卓)广播大全 Intent Action 事