改造API调用会在互联网连接较弱时引发IOException异常,但其他应用例如Youtube可以正常工作

问题描述

互联网连接中断时,Retrofit API调用会引发IOException异常,但Youtube等其他应用程序仍可正常工作。

这是我的apiclient类。

公共类Loginapiclient {

private static Retrofit retrofit = null;

public  static Retrofit getClient() {

    if(retrofit == null)
    {
        Gson gson = new GsonBuilder()
                .setLenient()
                .create();
        OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder();
        okHttpClientBuilder.readTimeout(120,TimeUnit.SECONDS)
                .connectTimeout(120,TimeUnit.SECONDS)
                .writeTimeout(120,TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .build();
        okHttpClientBuilder.addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request original = chain.request();

                Request request = original.newBuilder()
                        .addHeader("content-type","application/json")
                        .addHeader("device_type","android")
                        .addHeader("Connection","close")
                        .method(original.method(),original.body())
                        .build();

                Log.e("Loginapiclient",""+request.toString());


                return chain.proceed(request);
            }
        });


        OkHttpClient client = okHttpClientBuilder.build();

        retrofit = new retrofit2.Retrofit.Builder()
                .baseUrl(BuildConfig.BASE_URL)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create(gson))
                .client(client)
                .build();

    }

    return retrofit;
}

}

调用api类的代码是:

        @Override
        public void onFailure(Call<List<TodayEarning>> call,Throwable t) {
            if(t instanceof IOException) {
                earningsPresenter.ondisplayMsg("Network connection error.");
            }else if(t instanceof TimeoutException) {
                earningsPresenter.ondisplayMsg("Connection timeout,please check your internet connection.");
            }else {
                earningsPresenter.ondisplayMsg("Server is not responding.");
            }
        }
    });

在互联网连接较弱时,显示网络连接错误。如果有人有解决方案,请提供帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)