Retrofit結合RXJava工具類

public class RetrofitUtils {
    private String baseUrl = "http://172.17.8.100";

    //設置BaseUrl
    public RetrofitUtils setBaseUrl(String baseUrl) {
        this.baseUrl = baseUrl;
        return this;
    }

    //get請求
    public RetrofitUtils get(String url, Map<String, String> map) {
        if (map == null) {//如果不需要參數,那麼自己去創建一個空的集合
            map = new HashMap<>();
        }
        BaseService service = getBaseService();
        Call<ResponseBody> call = service.get(url, map);
        doCall(call);
        return this;
    }

    //post請求
    public RetrofitUtils post(String url, Map<String, String> map) {
        BaseService service = getBaseService();
        Call<ResponseBody> call = service.post(url, map);
        doCall(call);
        return this;
    }

    //上傳

    public RetrofitUtils upload(String url, Map<String, String> map, String path) {
        MediaType mediaType = MediaType.parse("multipart/form-data; charset=utf-8");

        File file=new File(path);
        RequestBody body=RequestBody.create(mediaType,file);
        MultipartBody.Part part=MultipartBody.Part.createFormData("image",file.getName(),body);

        Retrofit retrofit = new Retrofit.Builder().baseUrl(baseUrl).build();
        BaseService service = retrofit.create(BaseService.class);
        Call<ResponseBody> call = service.uploadPic(url, map, part);
        doCall(call);
        return this;

    }

    private void doCall(Call<ResponseBody> call) {
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    if (listener != null) {
                        listener.success(response.body().string());
                    }

                    if (mHttpStreamListener != null) {
                        mHttpStreamListener.success(response.body().byteStream());
                    }


                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                if (listener != null) {
                    listener.fail(t.getMessage());
                }

                if (mHttpStreamListener != null) {
                    mHttpStreamListener.fail(t.getMessage());
                }

            }
        });
    }

    private BaseService getBaseService() {
        Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(baseUrl).build();
        return retrofit.create(BaseService.class);
    }

    private HttpListener listener;

    public void result(HttpListener listener) {
        this.listener = listener;
    }

    public interface HttpListener {
        void success(String data);

        void fail(String error);
    }

    private HttpStreamListener mHttpStreamListener;

    public void resultStream(HttpStreamListener mHttpStreamListener) {
        this.mHttpStreamListener = mHttpStreamListener;
    }

    public interface HttpStreamListener {
        void success(InputStream inputStream);

        void fail(String error);
    }


}

``//註解
public interface BaseService {

@GET
Call<ResponseBody> get(@Url String url, @QueryMap Map<String, String> map);

@POST
Call<ResponseBody> post(@Url String url, @QueryMap Map<String, String> map);


//上傳
@Multipart
@POST
Call<ResponseBody> uploadPic(@Url String url,
                             @HeaderMap Map<String, String> map,
                             @Part MultipartBody.Part part);

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章