
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动态设置超时?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)