Подтвердить что ты не робот

Библиотека Picasso, Android: использование приемника ошибок

Я играю с библиотекой Picasso для загрузки изображений, но у меня проблема. Когда изображение не загружается, я хочу скрыть представление, а не загружать изображение по умолчанию. Я заметил из источника, что похоже, что единственный способ добавить слушателя из конструктора, но метод ошибки никогда не вызывается, когда изображение не загружается. У кого-нибудь есть опыт?

    iv = (ImageView) findViewById(R.id.imageView);

    Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
    builder.listener(new Picasso.Listener() {

        @Override
        public void onImageLoadFailed(Picasso arg0, String arg1) {
            Log.e("Picasso Error", "Errored out, hiding view");
            iv.setVisibility(View.GONE);
        }
    });
    Picasso pic = builder.build();
    pic.load("thisshouldbreak.jpg").into(iv);
4b9b3361

Ответ 1

Picasso 2.0 позволяет присоединить обратный вызов к запросу.

https://github.com/square/picasso

Обратный вызов, который вы используете, предназначен для "глобального" прослушивателя, и он помогает вам отлаживать ошибки, которые могут произойти из-за сетевой нагрузки.

Используйте load(url).into(view, new Callback() {...}); в Picasso 2.0.

Не забудьте вызвать cancelRequest(target), если вы используете Callback.

Ответ 2

Мой пример:

Picasso picasso = new Picasso.Builder(parent.getContext())
            .listener(new Picasso.Listener() {
                @Override
                public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
                //Here your log
                }
            })
            .build();
    picasso.load(shopModel.getShopImg())
            .fit()
            .into(viewHolder.shopImg);

Ответ 3

Вы можете попробовать добавить "глобальный" прослушиватель.

    // create Picasso.Builder object
    Picasso.Builder picassoBuilder = new Picasso.Builder(this);

    picassoBuilder.listener(new Picasso.Listener() {
        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
            Log.e("PICASSO", uri.toString(), exception);
        }
    });

    // Picasso.Builder creates the Picasso object to do the actual requests
    Picasso picasso = picassoBuilder.build();

    try {
        Picasso.setSingletonInstance(picasso);
    } catch (IllegalStateException ignored) {
        // Picasso instance was already set
        // cannot set it after Picasso.with(Context) was already in use
    }

Любые последующие вызовы Picasso.with(Context context) возвращают экземпляр, который подключен к слушателю, поэтому все сбои будут регистрироваться.

Обратите внимание, что вам нужно позвонить setSingletonInstance как можно скорее, например. в приложении onCreate.

P.S. Код принят здесь - Настройка Picasso с Picasso.Builder

Ответ 4

Мой ответ:

File file = new File(filePath);
        Picasso.with(context).load(file).placeholder(R.drawable.draw_detailed_view_display).error(R.drawable.draw_detailed_view_display)
        .resize(400, 400).into(mImageView, new Callback() {

            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                mImageView.setVisibility(View.GONE);
            }
        });

Ответ 5

Просто предложение, но вы можете избежать проблем с программированием, если вы создадите "пустой" png файл и установите его как файл образа по умолчанию в папке res... вроде глупо, я знаю... но, вероятно, работать без борьба с...

Ответ 6

Когда мы получили ошибку, ошибка переходит к методу onError, тогда мы его обрабатываем!

private void getAvatar(){
    try {
        Picasso.with(mContext)
                .load(G.GET_AVATAR + '/' + G.SPUser.getString(G.PHONE_NUMBER_KEY, null) + ".jpg")
                .into(imgUserAvatar, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {
                        imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}