我正在使用Picasso来处理我的Android Udacity项目中的图像加载和缓存,我注意到缓存无法正常工作,因为我期待:
正如您在左侧片段中看到的那样,图像已经加载到较早的线程中。现在,使用相同的URL链接,我要求Picasso将该图像放在右侧的片段中。
这是在左侧片段上生成网格视图的代码(首先出现):
String load = String.format(sImgUrl, sImgSize, movie.poster_path);
Picasso.with(mContext.getApplicationContext())
.load(load)
.placeholder(R.drawable.abc_btn_rating_star_on_mtrl_alpha)
.error(R.drawable.abc_btn_rating_star_off_mtrl_alpha)
.resize(550, 775)
.into(viewHolder.imageView);
然后这是在正确的片段中运行的代码:
Picasso.with(getActivity().getApplicationContext())
.load(String.format(sImgUrl, sImgSize, mMovieObj.poster_path))
.error(R.drawable.blank)
.fit()// .resize(366, 516)
.into(mMovieThumb, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
Utils.log(sw.toString());
Utils.hideViewSafe(mMovieThumbProgress);
}
@Override
public void onError() {
Utils.log(sw.toString());
Utils.hideViewSafe(mMovieThumbProgress);
}
});
我在每个文件中使用相同的应用程序上下文以及加载文本:
String.format(sImgUrl, sImgSize, mMovieObj.poster_path))
和
getActivity().getApplicationContext()
所以,我认为Picasso应该检测到相同的URL加载链接在相同的上下文中何时会在短时间内彼此出现,然后Picasso会将完全相同的图像加载回应用程序。
如果这不是Picasso缓存的工作方式,那么它是如何实现的呢?
答案 0 :(得分:1)
正如所提及的评论,我猜这是受到两个片段中图像大小不同的影响。
我建议使用https://github.com/facebook/fresco代替毕加索。效率更高,特别是尺寸不同。您还可以根据需要直接访问缓存文件https://github.com/facebook/fresco/issues/80
答案 1 :(得分:0)
它可能与获取不允许缓存的图像时收到的HTTP头有关,因为Picasso依赖HTTP组件来执行缓存。
尝试在imgur上传图片,尝试对该路径进行硬编码,看看它是否有效。如果是这种情况,您必须找到有关如何从电影数据库中获取图像的解决方法。