2016-03-31 2 views
12

Я использую скольжение для загрузки изображений из URL. Пока я получаю изображения, я показываю загрузчик в представлении изображения. Некоторые из полученных изображений больше, и поэтому в медленном интернет-соединении происходит таймаут и выбрасывается исключениеglide image loadoutout увеличение

Как увеличить таймаут?

+0

Пробовали ли вы с помощью OK HTTP вместо залпа? Как описано здесь: https://github.com/bumptech/glide/wiki/Integration-Libraries#okhttp – alexislg

+1

Нет, я использовал volley –

ответ

11

После поиска много, наконец, получил ответ, если вы используете залп:

public class CustomGlide implements GlideModule { 
    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
     RequestQueue queue = new RequestQueue(// params hardcoded from Volley.newRequestQueue() 
       new DiskBasedCache(new File(context.getCacheDir(), "volley")), 
       new BasicNetwork(new HurlStack())) { 
      @Override public <T> Request<T> add(Request<T> request) { 
       request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1)); 
       return super.add(request); 
      } 
     }; 
     queue.start(); 
     glide.register(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(queue)); 
    } 
} 

Изменение DefaultRetryPolicy в соответствии с вашими потребностями

И в манифесте:

<meta-data 
      android:name="<package-name>.CustomGlide" 
      android:value="GlideModule" /> 
+0

Я объявил customGlide-класс, как вы говорите, но теперь, как использовать его в строке изображения с плавающей запятой в java класс ? – Dharmishtha

+0

Вы заявили в манифесте? –

+0

Да, я применил – Dharmishtha

9

Если вы хотели бы использовать OkHttp, пожалуйста, импортируйте glide:okhttp-integration в соответствии с this, а затем реализуйте свои собственные OkHttpGlideModule:

public class CustomGlideModule extends OkHttpGlideModule { 
    @Override 
    public void applyOptions(Context context, GlideBuilder builder) { 
     // stub 
    } 

    @Override 
    public void registerComponents(Context context, Glide glide) { 
     final OkHttpClient.Builder builder = new OkHttpClient.Builder(); 

     // set your timeout here 
     builder.readTimeout(30, TimeUnit.SECONDS); 
     builder.writeTimeout(30, TimeUnit.SECONDS); 
     builder.connectTimeout(30, TimeUnit.SECONDS); 

     glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build())); 
    } 
} 
3

Ниже подходит для: Glide 4.3.1 & OkHttp 3.9.1, немного отличается, чем раньше (это не более OkHttpGlideModule но AppGlideModule).

build.gradle

implementation 'com.squareup.okhttp3:okhttp:3.9.1' 
implementation 'com.github.bumptech.glide:glide:4.3.1' 
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1' 
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.1' 

CustomGlideModule

@GlideModule 
public class CustomGlideModule extends AppGlideModule { 

    @Override 
    public void registerComponents(Context context, Glide glide, Registry registry) { 
     final OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
     builder.readTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     builder.writeTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     builder.connectTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS); 
     registry.append(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build())); 
    } 

} 
Смежные вопросы