Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在改装中设置自定义连接超时不起作用_Android_Retrofit2_Okhttp - Fatal编程技术网

Android 在改装中设置自定义连接超时不起作用

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

改型不采用自定义超时,默认连接超时时间为10秒

我已经尝试过所有设置自定义超时的方法,如下面的代码

//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();你能更新一下吗