package io.futurestud.tutorials.glide.ui.activities; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import java.util.HashMap; import java.util.Map; import butterknife.Bind; import butterknife.ButterKnife; import io.futurestud.tutorials.glide.R; public class UsageExampleGlideUrl extends AppCompatActivity { @Bind(R.id.standard_list_imageview1) ImageView imageView1; @Bind(R.id.standard_list_imageview3) ImageView imageView2; @Bind(R.id.standard_list_imageview4) ImageView imageView3; private Context context = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_standard_imageview); ButterKnife.bind(this); loadFirst(); } private void loadFirst() { Glide .with(context) .load(new GlideUrlWithQueryParameter("http://placehold.it/500x500", "access", "mysecrettoken")) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .listener(new RequestListener<GlideUrlWithQueryParameter, GlideDrawable>() { @Override public boolean onException(Exception e, GlideUrlWithQueryParameter model, Target<GlideDrawable> target, boolean isFirstResource) { Toast.makeText(context, "error", Toast.LENGTH_SHORT).show(); return false; } @Override public boolean onResourceReady(GlideDrawable resource, GlideUrlWithQueryParameter model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { loadSecond(); loadThird(); return false; } }) .into(imageView1); } // this photo should be loaded, since only the token is different private void loadSecond() { Toast.makeText(context, "loading 2", Toast.LENGTH_SHORT).show(); HashMap<String, Object> queryParams = new HashMap<>(); queryParams.put("source", "feed"); queryParams.put("access", "mysecrettoken"); Glide .with(context) //.using(new NetworkDisablingLoader()) .load(new GlideUrlWithQueryParameter("http://placehold.it/500x500", queryParams)) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageView2); } // this photo should not be loaded, since the base part of the URL is different (in this case different size) private void loadThird() { Toast.makeText(context, "loading 3", Toast.LENGTH_SHORT).show(); Glide .with(context) //.using(new NetworkDisablingLoader()) .load(new GlideUrlWithQueryParameter("http://placehold.it/400x400", "access", "mysecrettoken")) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageView3); } public static class GlideUrlWithQueryParameter extends GlideUrl { private String mSourceUrl; public GlideUrlWithQueryParameter(String baseUrl, String key, String value) { super(buildUrl(baseUrl, key, value)); mSourceUrl = baseUrl; } public GlideUrlWithQueryParameter(String baseUrl, Map<String, Object> queryParams) { super(buildUrl(baseUrl, queryParams)); mSourceUrl = baseUrl; } private static String buildUrl(String baseUrl, String key, String value) { StringBuilder stringBuilder = new StringBuilder(baseUrl); if (stringBuilder.toString().contains("?")) { stringBuilder.append("&"); } else { stringBuilder.append("?"); } stringBuilder.append(key); stringBuilder.append("="); stringBuilder.append(value); return stringBuilder.toString(); } private static String buildUrl(String baseUrl, Map<String, Object> queryParams) { StringBuilder stringBuilder = new StringBuilder(baseUrl); for (Map.Entry<String, Object> entry : queryParams.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); if (stringBuilder.toString().contains("?")) { stringBuilder.append("&"); } else { stringBuilder.append("?"); } stringBuilder.append(key); stringBuilder.append("="); stringBuilder.append(value); } return stringBuilder.toString(); } @Override public String getCacheKey() { return mSourceUrl; } @Override public String toString() { return super.getCacheKey(); } } }