1. 程式人生 > >Retrofit+RxJava上傳檔案和頭像

Retrofit+RxJava上傳檔案和頭像

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");

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 {

               }
           });