簡體   English   中英

如何增加robospice android中的改進請求的超時?

[英]How to increase timeout for retrofit requests in robospice android?

我在我的項目中實現了robospice並對所有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;
    }
}

我在這里偶然發現了類似的問題,最終在其他地方找到了答案。 如果在這里有一個更完整的例子,我會節省一些時間,所以我回過頭來發布對我有用的東西以防它幫助其他人:

適配器具有增加的讀取超時

    // 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/getBaseApiUrl()
getRetrofitLogLevel()返回RestAdapter.LogLevel.FULLRestAdapter.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"
    ...
}

RetrofitSpiceService擴展服務中,您需要覆蓋createRestAdapterBuilder()

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

CustomClient是您需要自己編寫以提供自己的超時的類。 如果您正在使用OkHttp,請查看默認的OkClient以供參考: https//github.com/square/retrofit/blob/43b7ea14e5aca1d710deccb95b79484b03e99bb9/retrofit/src/main/java/retrofit/client/OkClient.java

我不知道robospice,但改裝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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM