How to increase timeout for retrofit requests in robospice android?

前端 未结 3 830
刺人心
刺人心 2021-02-07 19:02

I have implemented robospice in my project and using retrofit for all api calls. For some of requests, I need to increase timeout, please let me know how can I do that?

相关标签:
3条回答
  • 2021-02-07 19:29

    I don't know about robospice but with retrofit 2+ and okhttp3+ you should set a new client like this.

    OkHttpClient okHttpClient = new OkHttpClient();
    Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constantes.URL_DOMAIN)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient.newBuilder().connectTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).readTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).writeTimeout(Constantes.TIMEOUT, TimeUnit.SECONDS).build())
                .build();
    

    import this in your module build.gradle:

    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
    compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
    
    0 讨论(0)
  • 2021-02-07 19:37

    I stumbled in here with a similar question and eventually found the answer elsewhere. Had there been a more complete example here, I would have saved some time so I circled back to post what worked for me just in case it helps others:

    Adapter with increased read timeout

        // create client
        OkHttpClient okHttpClient = new OkHttpClient();
        okHttpClient.setReadTimeout(60 * 1000, TimeUnit.MILLISECONDS);
    
        // create rest adapter using the client above
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(getBaseApiUrl())
                .setClient(new OkClient(okHttpClient))
                // this gson converter below is optional. We use it for parsing dates and enums
                .setConverter(new GsonConverter(createApiGson()))
                .setLogLevel(getRetrofitLogLevel())
                .build();
    

    NOTE: for us, getBaseApiUrl() returns something like: https://some.company.com/api/
    and getRetrofitLogLevel() returns either RestAdapter.LogLevel.FULL or RestAdapter.LogLevel.NONE depending on which flavor of the app is built.

    Lastly, these are the main dependencies that make everything work:

    Key dependencies

    dependencies {
        ...
        compile "com.squareup.retrofit:retrofit:1.5.0"
        compile "com.squareup.retrofit:retrofit-mock:1.5.0"
        compile "com.squareup.okhttp:okhttp:1.5.4"
        compile "com.google.code.gson:gson:2.2.4"
        ...
    }
    
    0 讨论(0)
  • 2021-02-07 19:43

    In your RetrofitSpiceService extending service, you'll need to override createRestAdapterBuilder().

     @Override
     protected Builder createRestAdapterBuilder() {
        Builder builder = super.createRestAdapterBuilder();
        builder.setClient(new CustomClient());
        return builder;
      }
    

    CustomClient is the class that you need to write yourself to supply your own timeouts. If you're using OkHttp, take a look at the default OkClient for reference: https://github.com/square/retrofit/blob/43b7ea14e5aca1d710deccb95b79484b03e99bb9/retrofit/src/main/java/retrofit/client/OkClient.java

    0 讨论(0)
提交回复
热议问题