首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(2.0) Retrofit调用内部的Retrofit调用导致超时异常

(2.0) Retrofit调用内部的Retrofit调用导致超时异常
EN

Stack Overflow用户
提问于 2017-09-05 15:25:30
回答 1查看 144关注 0票数 0

我使用的是Retrofit 2.0,下面的代码将会记录:

"insertListingImages, SocketOutOfTimeException:TimeOut timeout"

为什么会导致超时异常?我该如何解决它?奇怪的是,如果改造调用,hi()不在改造调用中,insertListingImages()一切都会工作得很好。

代码语言:javascript
复制
 retrofit = new Retrofit.Builder()
                .baseUrl("http://IP_ADRESS/")
                .addConverterFactory(GsonConverterFactory.create())
                .build().create(DatabaseInterface.class);

 retrofit.insertListingImages(imageListingRequest).enqueue(new Callback<Void>() {
                    @Override
                    public void onResponse(Call<Void> call, Response<Void> response) {
                        Log.d("insertListingImages", "Success");
                          retrofit.hi().enqueue(new Callback<Void>(){
                            @Override
                            public void onResponse(Call<Void> call, Response<Void> response){
                               Log.d("hiTest", "Success");
                            }

                            @Override
                            public void onFailure(Call<Void> call, Throwable t) {
                              Log.d("hiTest", "fail: " + t.toString() + " " + t.getMessage());
                            }


                          });
                    }

                    @Override
                    public void onFailure(Call<Void> call, Throwable t) {
                        Log.d("insertListingImages", "fail: " + t.toString() + " " + t.getMessage());
                    }
 });
EN

回答 1

Stack Overflow用户

发布于 2017-09-05 15:28:38

您可以通过此代码更改连接超时和读取超时。您必须为改造设置自定义客户端

代码语言:javascript
复制
  HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().connectTimeout(120, TimeUnit.SECONDS).readTimeout(120, TimeUnit.SECONDS).addInterceptor(interceptor).build();
Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.url)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();

在上面的代码中,将超时设置为120秒,您可以根据需要进行更改

需要在build.gradle文件中添加以下行

代码语言:javascript
复制
compile 'com.squareup.okhttp3:logging-interceptor:3.3.1'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46049213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档