您的位置:首页 > 编程语言 > Java开发

Retrofit+RxJava上传文件和头像

2018-02-02 00:20 253 查看
compile 'io.reactivex.rxjava2:rxjava:2.0.1'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    compile 'com.squareup.retrofit2:retrofit:2.3.0'    compile 'com.squareup.retrofit2:converter-gson:2.3.0'    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//自定义接口   存放uri串
public interface Getnet {
public static String net= "https://www.zhaoapi.cn/";//retrofit使用的baseurl
//接口为  网络请求的方式  必须post
public interface TestService {
//第一种方式上传头像
@POST("file/upload")
@Multipart
Observable<FileResultBean> upload(@Part("uid") RequestBody uid, @Part MultipartBody.Part file);

//第二种方式上传头像
@POST("file/upload")
@Multipart
Observable<FileResultBean> upload2(@Query("uid") String uid, @Part MultipartBody.Part file);

}
//工具包   解析json串的时候用
public class Util {
private volatile static Util util=null;
private Util(){

}
public static Util getmInstance(){
if (util==null){
synchronized (Util.class){
if (util==null){
util=new Util();
}
}
}
return util;
}
public Testservice getnetjson(String uri){ Retrofit retrofit = new Retrofit.Builder().baseUrl(uri)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create                                 
.build();
             Testservive testservive = retrofit.create(Testservive.class);return testservive;
//上传头像的代码
File f=new File(Environment.getExternalStorageDirectory(),"a.jpg");
Tes4000tservive testservive = Util.getnetjson(Getnet.net);
 //如果用第二种方式上传头像   可以不用写RequestBody uidBody = RequestBody.create(MediaType.parse("multipart/form-data"),"10134");//f为file路径MultipartBody.Part filePart = MultipartBody.Part.createFormData("file",f.getName(),RequestBody.create(
MediaType.parse("application/octet-stream"),f));//第一种方式上传头像Observable<FileResultBean> upload = testService.upload(uidBody, filePart);//第二种方式  上传头像//   Observable<FileResultBean> upload = apiService.upload2("10134", filePart);upload.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<FileResultBean>() {@Overridepublic void accept(FileResultBean fileResultBean) throws Exception {}});

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: