网络请求框架很多,现在主流的就是用RxJava响应式编程,其实也是观察者模式的另外一种运用,但现在我们公司维护老项目使用的网络框架是apache的传递的参数是一个一个键值对的形式作为参数传递,由于过于老旧,有可能这种传递数据到后台就会出现某些参数丢失的情况,还好之前学过Rxjava2+Okhttp3+Retrofit2 这个里呢就不对Rxjava做过多的讲述 ,在网络上也有很多的关于Rxjava的介绍,这里主要是针对Rxjava从本地上传图片到服务端的讲解。
在做这个功能的时候也查过很多的资料 ,讲解的内容也五花八门,有些过于赘述,但使用性不是很好,有可能你花大量的时间,结果发现关键代码只需要4-5行就可以了
1.首先配置Rxjava的网络请求,配置好过后创建一个接口 RequestApi
2.上关键的代码
没错关键的代码就这四行 ,对于一般的图片上传这四行代码足够,不需要过多的代码赘述,这样一个图片上传的功能就算做完了
/* 上传文件至Server的方法*/
public void uploadFile(String filePath, OnResponseResult responseResult) {
this.responseResult = responseResult;
File file =new File(filePath);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpg"),file);
MultipartBody.Part body = MultipartBody.Part.createFormData("picture",file.getName(),requestBody);
BlueTownRequest blueTownRequest = ApiService.createService(BlueTownRequest.class);
blueTownRequest.uploadPhoto(body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(UploadPhotoBean uploadPhotoBean)throws Exception {
if (uploadPhotoBean.rep_code.equals(Constant.HTTP_SUCCESS) && uploadPhotoBean.result!=null){
responseResult.success(uploadPhotoBean.result);
}else{
responseResult.failed(uploadPhotoBean.rep_msg);
}
}
}, new Consumer() {
@Override
public void accept(Throwable throwable)throws Exception {
responseResult.failed(throwable.getMessage().toString());
}
});
}