Android 在改装中设置自定义连接超时不起作用
改型不采用自定义超时,默认连接超时时间为10秒 我已经尝试过所有设置自定义超时的方法,如下面的代码Android 在改装中设置自定义连接超时不起作用,android,retrofit2,okhttp,Android,Retrofit2,Okhttp,改型不采用自定义超时,默认连接超时时间为10秒 我已经尝试过所有设置自定义超时的方法,如下面的代码 //service generator class public class ServiceGenerator{ private Context context; private static OkHttpClient.Builder httpClient =new OkHttpClient.Builder(); private static Retrofi
//service generator class
public class ServiceGenerator{
private Context context;
private static OkHttpClient.Builder httpClient =new OkHttpClient.Builder();
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(UriList.BASE_URL)
.client(getRequestHeader())
.addConverterFactory(GsonConverterFactory.create());
public static HttpLoggingInterceptor setLogger() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
return logging;
}
public static <S> S createService(Class<S> serviceClass, Context context) {
if (!httpClient.interceptors().isEmpty()) {
httpClient.interceptors().clear();
}
httpClient.addInterceptor(new NetworkConnectionInterceptor(context));
httpClient.addInterceptor(setLogger());
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header("LocalSystemDate", MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
private static OkHttpClient getRequestHeader() {
return new OkHttpClient.Builder()
.readTimeout(2, TimeUnit.MINUTES)
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.build();
}
}
//服务生成器类
公共类服务生成器{
私人语境;
私有静态OkHttpClient.Builder httpClient=new OkHttpClient.Builder();
私人静态改装=
新的改型.Builder()
.baseUrl(UriList.BASE\u URL)
.client(getRequestHeader())
.addConverterFactory(GsonConverterFactory.create());
公共静态HttpLoggingInterceptor setLogger(){
HttpLoggingInterceptor logging=新的HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
回程测井;
}
公共静态S createService(类serviceClass,上下文){
如果(!httpClient.interceptors().isEmpty()){
httpClient.interceptors().clear();
}
addInterceptor(新的网络连接Interceptor(上下文));
httpClient.addInterceptor(setLogger());
httpClient.addInterceptor(新的拦截器(){
@凌驾
公共响应拦截(链)引发IOException{
Request original=chain.Request();
Request.Builder requestBuilder=original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header(“LocalSystemDate”,MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(),original.body());
Request=requestBuilder.build();
返回链。继续(请求);
}
});
OkHttpClient=httpClient.build();
改装改装=builder.client(client.build();
返回改装。创建(serviceClass);
}
私有静态OkHttpClient getRequestHeader(){
返回新的OkHttpClient.Builder()
.readTimeout(2,时间单位为分钟)
.connectTimeout(2,时间单位为分钟)
.writeTimeout(2,时间单位:分钟)
.build();
}
}
10秒后,我得到一个错误:
D/OkHttp: <-- HTTP FAILED: java.net.SocketTimeoutException
D/OkHttp:您在创建改造对象时使用了错误的httpclient
您必须在createService(Class-serviceClass,Context-Context)
因此您的createService(Class-serviceClass,Context-Context)
将
public static <S> S createService(Class<S> serviceClass, Context context) {
if (!httpClient.interceptors().isEmpty()) {
httpClient.interceptors().clear();
}
httpClient.addInterceptor(new NetworkConnectionInterceptor(context));
httpClient.addInterceptor(setLogger());
httpClient.readTimeout(2, TimeUnit.MINUTES)
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES);
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header("LocalSystemDate", MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
公共静态S createService(类serviceClass,上下文){
如果(!httpClient.interceptors().isEmpty()){
httpClient.interceptors().clear();
}
addInterceptor(新的网络连接Interceptor(上下文));
httpClient.addInterceptor(setLogger());
httpClient.readTimeout(2,TimeUnit.MINUTES)
.connectTimeout(2,时间单位为分钟)
.writeTimeout(2,时间单位为分钟);
httpClient.addInterceptor(新的拦截器(){
@凌驾
公共响应拦截(链)引发IOException{
Request original=chain.Request();
Request.Builder requestBuilder=original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header(“LocalSystemDate”,MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(),original.body());
Request=requestBuilder.build();
返回链。继续(请求);
}
});
OkHttpClient=httpClient.build();
改装改装=builder.client(client.build();
返回改装。创建(serviceClass);
}
它现在可以用了。试试看。创建改装对象时,您使用了错误的httpclient
您必须在createService(Class-serviceClass,Context-Context)
因此您的createService(Class-serviceClass,Context-Context)
将
public static <S> S createService(Class<S> serviceClass, Context context) {
if (!httpClient.interceptors().isEmpty()) {
httpClient.interceptors().clear();
}
httpClient.addInterceptor(new NetworkConnectionInterceptor(context));
httpClient.addInterceptor(setLogger());
httpClient.readTimeout(2, TimeUnit.MINUTES)
.connectTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES);
httpClient.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header("LocalSystemDate", MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(), original.body());
Request request = requestBuilder.build();
return chain.proceed(request);
}
});
OkHttpClient client = httpClient.build();
Retrofit retrofit = builder.client(client).build();
return retrofit.create(serviceClass);
}
公共静态S createService(类serviceClass,上下文){
如果(!httpClient.interceptors().isEmpty()){
httpClient.interceptors().clear();
}
addInterceptor(新的网络连接Interceptor(上下文));
httpClient.addInterceptor(setLogger());
httpClient.readTimeout(2,TimeUnit.MINUTES)
.connectTimeout(2,时间单位为分钟)
.writeTimeout(2,时间单位为分钟);
httpClient.addInterceptor(新的拦截器(){
@凌驾
公共响应拦截(链)引发IOException{
Request original=chain.Request();
Request.Builder requestBuilder=original.newBuilder()
MyApplication.getInstance().getApiCredential())
.header(“LocalSystemDate”,MyApplication.getInstance().getCurrentDateAndTimeWithTimeZone())
.method(original.method(),original.body());
Request=requestBuilder.build();
返回链。继续(请求);
}
});
OkHttpClient=httpClient.build();
改装改装=builder.client(client.build();
返回改装。创建(serviceClass);
}
它现在可以用了。试试看。你能添加你的调用方法吗?@RajasekaranM调用方法:Service Service=ServiceGenerator.createService(Service.class,context);调用opSearchResults=service.getOpSearchResults();你能更新一下吗