Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滑动更改动态url的缓存键_Android_Picasso_Android Glide - Fatal编程技术网

Android 滑动更改动态url的缓存键

Android 滑动更改动态url的缓存键,android,picasso,android-glide,Android,Picasso,Android Glide,我正在尝试使用Glide从服务器加载图像。但问题是动态URL,每次我打开页面时,它都会从服务器加载相同的图像 这是我的密码 @android.databinding.BindingAdapter("imageurl") public static void loadImageFromUrl(ImageView imageView, String url) { if (url == null || url.isEmpty()) return; GlideUrl glideUrl

我正在尝试使用Glide从服务器加载图像。但问题是动态URL,每次我打开页面时,它都会从服务器加载相同的图像

这是我的密码

@android.databinding.BindingAdapter("imageurl")
public static void loadImageFromUrl(ImageView imageView, String url) {
    if (url == null || url.isEmpty()) return;

    GlideUrl glideUrl = new GlideUrl(url, new LazyHeaders.Builder()
            .addHeader("Authorization", "Bearer " + NetworkConstant.TOKEN).build());

    View parent = imageView.getRootView();
    final ProgressBar progressBar = (ProgressBar) parent.findViewById(R.id.progressBar);


    Glide.with(imageView.getContext()).load(glideUrl).listener(new RequestListener<GlideUrl, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, GlideUrl model, Target<GlideDrawable> target, boolean isFirstResource) {
            Log.e("Error", e.getMessage());
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, GlideUrl model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            Log.e("IsFromCache", isFromMemoryCache + " : firstResource" + isFirstResource);

            if (progressBar != null && progressBar.getVisibility() == View.VISIBLE) {
                progressBar.setVisibility(View.GONE);
            }
            return false;
        }
    })
            .fitCenter()
            .crossFade()
            .diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);
}
@android.databinding.BindingAdapter(“imageurl”)
公共静态void loadImageFromUrl(ImageView ImageView,字符串url){
if(url==null | | url.isEmpty())返回;
GlideUrl GlideUrl=newglideurl(url,newlazyheaders.Builder()
.addHeader(“授权”、“承载者”+NetworkConstant.TOKEN).build());
View parent=imageView.getRootView();
final ProgressBar ProgressBar=(ProgressBar)parent.findviewbyd(R.id.ProgressBar);
Glide.with(imageView.getContext()).load(glideUrl.listener(newrequestlistener()){
@凌驾
公共布尔onException(异常e、GlideUrl模型、目标、布尔isFirstResource){
Log.e(“Error”,e.getMessage());
返回false;
}
@凌驾
公共布尔onResourceReady(GlideDrawable资源、GlideUrl模型、目标目标、布尔isFromMemoryCache、布尔isFirstResource){
Log.e(“IsFromCache”,isFromMemoryCache+”:firstResource“+isFirstResource);
if(progressBar!=null&&progressBar.getVisibility()==View.VISIBLE){
progressBar.setVisibility(View.GONE);
}
返回false;
}
})
.fitCenter()
.crossFade()
.diskCacheStrategy(diskCacheStrategy.SOURCE).into(imageView);
}

最后,通过更改缓存键来解决这个问题

public class GlideNoTokenUrl extends GlideUrl {

public GlideNoTokenUrl(URL url) {
    super(url);
}

public GlideNoTokenUrl(String url) {
    super(url);
}

public GlideNoTokenUrl(URL url, Headers headers) {
    super(url, headers);
}

public GlideNoTokenUrl(String url, Headers headers) {
    super(url, headers);
}

@Override
public String getCacheKey() {
    String url = toStringUrl();

    if (url.contains("?")) {
        url = url.substring(0, url.indexOf("?"));
    }
    return url;
}

}

最后,通过更改缓存键来解决这个问题

public class GlideNoTokenUrl extends GlideUrl {

public GlideNoTokenUrl(URL url) {
    super(url);
}

public GlideNoTokenUrl(String url) {
    super(url);
}

public GlideNoTokenUrl(URL url, Headers headers) {
    super(url, headers);
}

public GlideNoTokenUrl(String url, Headers headers) {
    super(url, headers);
}

@Override
public String getCacheKey() {
    String url = toStringUrl();

    if (url.contains("?")) {
        url = url.substring(0, url.indexOf("?"));
    }
    return url;
}

}

我无法将此功能与Glide 4.8.0配合使用。你知道你将如何用这个版本实现它吗?你可以扩展GlideUrl并覆盖getCacheKey方法,然后返回你想要的密钥谢谢我让它工作了。我试图通过在AppModule中注册它来将其设置为默认设置,但我发现这太难了。除了名为
loadUrlWithToken()
loadUrlWithToken()
函数之外,我还创建了一个kotlin扩展函数,该函数随后使用GlideNoTokenUrlYes。您还可以使用加载。您可以将GlideNoTokenUrl(URL)作为参数传递,而不是传递URL。是的,我在扩展函数中就是这样做的。其目的是帮助其他开发人员看到他们应该在自动完成中使用GlideNoTokenUrl,因为loadUrlWithToken是highlightedI无法让它与Glide 4.8.0一起使用。你知道你将如何用这个版本实现它吗?你可以扩展GlideUrl并覆盖getCacheKey方法,然后返回你想要的密钥谢谢我让它工作了。我试图通过在AppModule中注册它来将其设置为默认设置,但我发现这太难了。除了名为
loadUrlWithToken()
loadUrlWithToken()
函数之外,我还创建了一个kotlin扩展函数,该函数随后使用GlideNoTokenUrlYes。您还可以使用加载。您可以将GlideNoTokenUrl(URL)作为参数传递,而不是传递URL。是的,我在扩展函数中就是这样做的。其目的是帮助其他开发人员看到他们应该在自动完成中使用GlideNoTokenUrl,因为loadUrlWithToken高亮显示