如何在Robospice Android中增加Retrofit请求的超时时间?

13

我已经在我的项目中实现了RoboSpice,并使用Retrofit进行所有API调用。对于某些请求,我需要增加超时时间,请告诉我如何做到这一点?

实际上,我正在使用扩展RetrofitGsonSpiceService的服务。以下是我的服务类代码:

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;
    }
}
3个回答

17

我因类似问题而意外地进入了这里,并最终在其他地方找到了答案。如果这里有一个更完整的示例,我会节省一些时间,所以我绕回来发布了对我有用的内容,以防对他人有所帮助:

增加读取超时的适配器

    // 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();

注意:对于我们而言,getBaseApiUrl() 返回的是这样的内容:https://some.company.com/api/,而 getRetrofitLogLevel() 返回的则是 RestAdapter.LogLevel.FULL 或者 RestAdapter.LogLevel.NONE,具体取决于构建的应用程序类型。

最后,这些是使一切正常工作的主要依赖项:

关键依赖项

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"
    ...
}

6
在扩展服务的RetrofitSpiceService中,您需要覆盖createRestAdapterBuilder()方法。
 @Override
 protected Builder createRestAdapterBuilder() {
    Builder builder = super.createRestAdapterBuilder();
    builder.setClient(new CustomClient());
    return builder;
  }

CustomClient是你需要自己编写的类,用于提供自定义超时时间。如果你正在使用OkHttp,请参考默认的OkClienthttps://github.com/square/retrofit/blob/43b7ea14e5aca1d710deccb95b79484b03e99bb9/retrofit/src/main/java/retrofit/client/OkClient.java


3

我不了解robospice,但使用retrofit 2+和okhttp3+,您应该像这样设置新客户端。

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();

在你的模块 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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接