From 5a9affd21818bb6c0746ec723fb6b9a7d611de7f Mon Sep 17 00:00:00 2001 From: jiarwang <2186000761@qq.com> Date: Fri, 6 Sep 2019 15:33:39 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89Converter.Factory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/droidlover/xdroidmvp/net/XApi.java | 61 +++++++++++++++++-- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/mvp/src/main/java/cn/droidlover/xdroidmvp/net/XApi.java b/mvp/src/main/java/cn/droidlover/xdroidmvp/net/XApi.java index b11b109..f299616 100644 --- a/mvp/src/main/java/cn/droidlover/xdroidmvp/net/XApi.java +++ b/mvp/src/main/java/cn/droidlover/xdroidmvp/net/XApi.java @@ -1,12 +1,19 @@ package cn.droidlover.xdroidmvp.net; +import android.graphics.Bitmap; +import android.support.annotation.NonNull; + import org.reactivestreams.Publisher; +import java.security.Provider; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import cn.droidlover.xdroidmvp.kit.Kits; +import cn.droidlover.xdroidmvp.mvp.VDelegateBase; import cn.droidlover.xdroidmvp.net.progress.ProgressHelper; import io.reactivex.Flowable; import io.reactivex.FlowableTransformer; @@ -16,6 +23,7 @@ import okhttp3.CookieJar; import okhttp3.Interceptor; import okhttp3.OkHttpClient; +import retrofit2.Converter; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; @@ -53,7 +61,9 @@ public static XApi getInstance() { public static S get(String baseUrl, Class service) { - return getInstance().getRetrofit(baseUrl, true).create(service); + Config config = new Config(baseUrl) + .setUseRx(true); + return getInstance().getRetrofit(config).create(service); } public static void registerProvider(NetProvider provider) { @@ -64,13 +74,21 @@ public static void registerProvider(String baseUrl, NetProvider provider) { getInstance().providerMap.put(baseUrl, provider); } - public Retrofit getRetrofit(String baseUrl, boolean useRx) { - return getRetrofit(baseUrl, null, useRx); + Config config = new Config(baseUrl) + .setUseRx(useRx); + return getRetrofit(config); } - public Retrofit getRetrofit(String baseUrl, NetProvider provider, boolean useRx) { + public Retrofit getRetrofit(Config config) { + + String baseUrl = config.baseUrl; + NetProvider provider = config.provider; + boolean useRx = config.useRx; + + List factories = config.converterFactories; + if (Kits.Empty.check(baseUrl)) { throw new IllegalStateException("baseUrl can not be null"); } @@ -88,6 +106,11 @@ public Retrofit getRetrofit(String baseUrl, NetProvider provider, boolean useRx) .baseUrl(baseUrl) .client(getClient(baseUrl, provider)) .addConverterFactory(GsonConverterFactory.create()); + + for (int i = 0, j = factories.size(); i < j; i++) { + builder.addConverterFactory(factories.get(j)); + } + if (useRx) { builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create()); } @@ -217,5 +240,35 @@ public Publisher apply(T model) throws Exception { }; } + public static class Config { + private String baseUrl; + private boolean useRx; + private NetProvider provider; + private final List converterFactories = new ArrayList<>(); + + public Config(String baseUrl) { + this.baseUrl = baseUrl; + } + + public Config setBaseUrl(@NonNull String baseUrl) { + this.baseUrl = baseUrl; + return this; + } + + public Config setUseRx(boolean useRx) { + this.useRx = useRx; + return this; + } + + public Config setProvider(NetProvider provider) { + this.provider = provider; + return this; + } + + public Config addConverterFactory(@NonNull Converter.Factory factory) { + this.addConverterFactory(factory); + return this; + } + } }