Первая ошибка при загрузке изображения с Picasso

У меня есть Activity с ImagePagerAdapter (расширяет FragmentStatePagerAdapter), у которого есть этот метод 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 drawable. Если я нажму кнопку «Назад» и вернусь к Activity, у которого есть ImagePager, Пикассо загрузит изображение правильно. Если в ImagePager есть два или более изображений, и я прокручиваю между изображениями, они загружаются правильно несколько раз без выхода и повторного входа в ImagePager.

Теории:

Я думаю, что это может быть проблема кеша, но после многих поисков я уверен, что проблема в слабой ссылке Picasso. Имейте в виду, что проблема возникает только в ПЕРВЫЙ РАЗ, когда я загружаю действие, имеющее ImagePager.

В другом месте в настоящее время Picasso отлично работает в listView с адаптером, загружающим картинки в первый раз. Вызов Picasso внутри метода getView класса Adapter.

Посещенные ссылки

Заранее спасибо.


person wendigo    schedule 19.02.2014    source источник
comment
Вы подключили прослушиватель к вашему экземпляру Picasso? Вы можете распечатать трассировку стека и посмотреть, в чем была ошибка. И на какой версии Пикассо это?   -  person dnkoutso    schedule 13.04.2014


Ответы (1)


Проблема решилась в Picasso 2.3.0.

Исправление находится в журнале изменений Picasso:

Запросы теперь будут автоматически воспроизводиться, если они не были выполнены из-за сетевых ошибок.

Надеюсь, это сэкономит вам много часов.

person wendigo    schedule 12.06.2014
comment
Я попытался обновить до последней версии Picasso 2.3.2 в Android Studio v0.8.2, но мне не удалось синхронизировать проект gradle с сообщением Error:Failed to find: com.squareup.picasso:picasso:2.3.2. Как это исправить? - person toobsco42; 18.07.2014
comment
@toobsco42 попробуйте эту строку: compile group: 'com.squareup.picasso', name: 'picasso', version: '2.3.+' - person wendigo; 18.07.2014
comment
Я обнаружил, что это проблема с разрешениями на перемещение или удаление файлов. После исправления разрешения на соответствующие папки и очистки проекта теперь все работает. - person toobsco42; 19.07.2014