毕加索缓存似乎不起作用

时间:2015-10-04 22:56:41

标签: android caching android-fragments android-activity picasso

我正在使用Picasso来处理我的Android Udacity项目中的图像加载和缓存,我注意到缓存无法正常工作,因为我期待:

enter image description here

正如您在左侧片段中看到的那样,图像已经加载到较早的线程中。现在,使用相同的URL链接,我要求Picasso将该图像放在右侧的片段中。

这是在左侧片段上生成网格视图的代码(首先出现):

https://github.com/esend7881/udacity-android-popmovie/blob/a9a1b9a19a37594bb5edd736b7ec59229fb5905a/app/src/main/java/com/ericsender/android_nanodegree/popmovie/adapters/GridViewAdapter.java#L71

    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);

然后这是在正确的片段中运行的代码:

https://github.com/esend7881/udacity-android-popmovie/blob/a9a1b9a19a37594bb5edd736b7ec59229fb5905a/app/src/main/java/com/ericsender/android_nanodegree/popmovie/fragments/MovieDetailsFragment.java#L308

    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缓存的工作方式,那么它是如何实现的呢?

2 个答案:

答案 0 :(得分:1)

正如所提及的评论,我猜这是受到两个片段中图像大小不同的影响。

我建议使用https://github.com/facebook/fresco代替毕加索。效率更高,特别是尺寸不同。您还可以根据需要直接访问缓存文件https://github.com/facebook/fresco/issues/80

答案 1 :(得分:0)

它可能与获取不允许缓存的图像时收到的HTTP头有关,因为Picasso依赖HTTP组件来执行缓存。

尝试在imgur上传图片,尝试对该路径进行硬编码,看看它是否有效。如果是这种情况,您必须找到有关如何从电影数据库中获取图像的解决方法。