第一次错误加载毕加索的图片

时间:2014-02-19 19:37:52

标签: android picasso

我的Activity ImagePagerAdapterFragmentStatePagerAdapter的扩展名)有getItem方法:

@Override
        public Fragment getItem(int position) {
            Log.d(LOGTAG, "------------>mUserPicturesList.get("+position+").getFilename(): " + mUserPicturesList.get(position).getFilename());
            return UserDetailFragment.newInstance(mUserPicturesList.get(position).getFilename());
        }

实例化的片段具有onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate and locate the main ImageView
    final View v = inflater.inflate(R.layout.image_detail_fragment, container, false);
    mImageView = (ImageView) v.findViewById(R.id.imageView);
    mProgressPicturePager = (ProgressBar) v.findViewById(R.id.progress_picture_pager);

    String imageUrl = WApp.PHOTO_URL + mImageUrl + "?type=user_gallery_big_img";

    Picasso picasso = Picasso.with(getActivity());
    picasso.setDebugging(true);
    picasso.load(imageUrl)
            .placeholder(R.drawable.no_picture_man_big)
            .error(android.R.drawable.stat_notify_error)
            .into(mImageView, new Callback() {
                @Override
                public void onSuccess() {
                    mProgressPicturePager.setVisibility(View.GONE);
                }

                @Override
                public void onError() {
                    Log.d(LOGTAG, "picasso load error");
                    mProgressPicturePager.setVisibility(View.GONE);
                }
            });

    return v;
}

问题:

第一次ImagePager加载时,毕加索会调用onError,显示.error可绘制。 如果我按下后退按钮并返回到Activity的{​​{1}},Picasso会正确加载图片。 如果ImagePager有两张或更多图片,并且我在图片之间滑动,那么这些图片会在没有退出的情况下正确加载一些,然后重新进入ImagePager

理论:

我认为这可能是缓存问题,但经过多次搜索后,我敢打赌问题出现在毕加索的弱引用中。 请记住,问题只出现在第一次加载具有ImagePager的活动时。

在另一个地方,目前ImagePagerPicasso中使用适配器首次加载图片时工作正常。在listView类的Picasso方法中调用getView

访问过的链接

提前致谢。

1 个答案:

答案 0 :(得分:1)

Picasso 2.3.0解决了这个问题。

修正案位于Picasso changelog

  

如果因网络错误导致请求失败,将自动重播请求。

我希望这可以节省你很多时间。