java-如何使用Retrofit2动态设置超时?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-如何使用Retrofit2动态设置超时?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2872字,纯文字阅读大概需要5分钟。
内容图文
![java-如何使用Retrofit2动态设置超时?](/upload/InfoBanner/zyjiaocheng/686/55f5574404b7472498463dbc143386dc.jpg)
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需要不同的超时时间.
我能怎么做?
有这样的东西吗?
@Timeout
Observable<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动态设置超时?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。