微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决改造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 举报,一经查实,本站将立刻删除。