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?
Actually I am using service that extends RetrofitGsonSpiceService. The code of my service class is below:
public class MyService extends RetrofitGsonSpiceService {
@Override
public void onCreate() {
super.onCreate();
addRetrofitInterface(MyInterface.class);
}
@Override
public CacheManager createCacheManager(Application application) throws CacheCreationException {
CacheManager cacheManager = new CacheManager();
ObjectPersisterFactory persistFactory = new RetrofitObjectPersisterFactory(application,
getConverter(), getCacheFolder());
persistFactory.setAsyncSaveEnabled(true);
cacheManager.addPersister(persistFactory);
return cacheManager;
}
@Override
protected String getServerUrl() {
return Utils.getBaseUrl();
}
@Override
protected RestAdapter.Builder createRestAdapterBuilder() {
RestAdapter.Builder builder = new RestAdapter.Builder().setRequestInterceptor(
new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader(Const.HEADER_DEVICE_TYPE_KEY,
Const.HEADER_DEVICE_TYPE_VALUE);
}
}
);
builder.setEndpoint(getServerUrl()).setConverter(getConverter());
return builder;
}
}
An invocation of a Retrofit method that sends a request to a webserver and returns a response. Each call yields its own HTTP request and response pair. Use clone() to make multiple calls with the same parameters to the same webserver; this may be used to implement polling or to retry a failed call.
Connection timeout is the time that start from sending the request to a completed TCP handshake with the server. If Retrofit couldn’t establish the connection to the server within the set connection timeout limit, request is considered as failed. A connection timeout may be set large for countries with bad Internet connection.
Get Our Retrofit Book! All modern Android apps need to do network requests. Retrofit offers you an extremely convenient way of creating and managing network requests. From asynchronous execution on a background thread, to automatic conversion of server responses to Java objects, Retrofit does almost everything for you.
In other words, if Retrofit couldn't establish a connection to the server within the set connection timeout limit, it'll count the request as failed. For example, increasing the default timeout of ten seconds to a higher value could make sense if you know your users are in conditions with bad Internet connection.
Get errorbody response . We can set timeouts settings on the underlying HTTP client. If we don’t specify a client, Retrofit will create one with default connect and read timeouts. By default, Retrofit uses the following timeouts: To customize the timeouts settings you need to configure OkHttp, Retrofit’s network layer. See the code below.
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:
// 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:
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"
...
}
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With