Retrofit+RxJava上傳檔案和頭像
阿新 • • 發佈:2018-12-31
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 '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 staticString 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") @MultipartObservable<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){ synchronizedpublic Testservice getnetjson(String uri){ Retrofit retrofit = new Retrofit.Builder().baseUrl(uri)(Util.class){ if (util==null){ util=new Util(); } } } return util; }
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create
.build();
Testservive testservive = retrofit.create(Testservive.class); return testservive;
//上傳頭像的程式碼
File f=new File(Environment.getExternalStorageDirectory(),"a.jpg");
Testservive 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>() { @Override public void accept(FileResultBean fileResultBean) throws Exception { } });