java-如何使用Retrofit2动态设置超时?

java-如何使用Retrofit2动态设置超时?,第1张

概述publicclassRouter{...privatestaticRetrofitretrofit=null;...publicRetrofitgetRetrofit(){if(retrofit==null){...OkHttpClientclient=newOkHttpClient.Builder().

public class Router {    ...    private static Retrofit retrofit = null;    ...    public Retrofit getRetrofit() {        if (retrofit == null) {            ...            OkhttpClIEnt clIEnt = new OkhttpClIEnt.Builder()                    .connectTimeout(30, TimeUnit.SECONDS)                    .writeTimeout(60, TimeUnit.SECONDS)                    .readTimeout(60, TimeUnit.SECONDS)                    .build();            retrofit = new Retrofit.Builder()                    .baseUrl("***")                    .addConverterFactory(GsonConverterFactory.create())                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                    .clIEnt(clIEnt)                    .build();        }        return retrofit;    }    ...}

我在OkhttpClIEnt中设置超时.现在有一个API需要不同的超时时间.

我能怎么做?

有这样的东西吗?

@TimeoutObservable<ResponseBody> exapmle(@Timeout("connect") int connect , @Timeout("read") int read , @Timeout("write") int write);

解决方法:

非常感谢.

这是我的代码:

public static final String CONNECT_TIMEOUT = "CONNECT_TIMEOUT";public static final String READ_TIMEOUT = "READ_TIMEOUT";public static final String WRITE_TIMEOUT = "WRITE_TIMEOUT";...Interceptor timeoutInterceptor = new Interceptor() {    @OverrIDe    public Response intercept(Chain chain) throws IOException {        Request request = chain.request();        int connectTimeout = chain.connectTimeoutMillis();        int readTimeout = chain.readTimeoutMillis();        int writeTimeout = chain.writeTimeoutMillis();        String connectNew = request.header(CONNECT_TIMEOUT);        String readNew = request.header(READ_TIMEOUT);        String writeNew = request.header(WRITE_TIMEOUT);        if (!TextUtils.isEmpty(connectNew)) {            connectTimeout = Integer.valueOf(connectNew);        }        if (!TextUtils.isEmpty(readNew)) {            readTimeout = Integer.valueOf(readNew);        }        if (!TextUtils.isEmpty(writeNew)) {            writeTimeout = Integer.valueOf(writeNew);        }        return chain                .withConnectTimeout(connectTimeout, TimeUnit.MILliSECONDS)                .withReadTimeout(readTimeout, TimeUnit.MILliSECONDS)                .withWriteTimeout(writeTimeout, TimeUnit.MILliSECONDS)                .proceed(request);    }};OkhttpClIEnt httpClIEnt = new OkhttpClIEnt.Builder()        .connectTimeout(DEFAulT_CONNECT_TIMEOUT, TimeUnit.MILliSECONDS)        .writeTimeout(DEFAulT_WRITE_TIMEOUT, TimeUnit.MILliSECONDS)        .readTimeout(DEFAulT_READ_TIMEOUT, TimeUnit.MILliSECONDS)        .addInterceptor(timeoutInterceptor)        .build();retrofit = new Retrofit.Builder()        .baseUrl(Host.Develop.ACCOUNT_HOST)        .addConverterFactory(GsonConverterFactory.create())        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())        .clIEnt(httpClIEnt)        .build();...

用法示例:

/** * check account status * * @param account * @return */@headers({"CONNECT_TIMEOUT:10000", "READ_TIMEOUT:10000", "WRITE_TIMEOUT:10000"})@GET("login/prelogin")Observable<ResponseBody> preLogin(@query("account") String account);

要么

/** * check account status *  * @param connectTimeout * @param readTimeout * @param writeTimeout * @param account * @return */@GET("login/prelogin")Observable<ResponseBody> preLogin(        @header("CONNECT_TIMEOUT") String connectTimeout,        @header("READ_TIMEOUT") String readTimeout,        @header("WRITE_TIMEOUT") String writeTimeout,        @query("account") String account);
总结

以上是内存溢出为你收集整理的java-如何使用Retrofit2动态设置超时?全部内容,希望文章能够帮你解决java-如何使用Retrofit2动态设置超时?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1091870.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存