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

перечисления должны быть безопасными по типу. Я думаю, что они не делали их неявно литыми, чтобы препятствовать другим видам использования. Хотя структура позволяет вам присваивать им постоянное значение, вы должны пересмотреть свои намерения. Если вы в основном используете перечисление для хранения постоянных значений, рассмотрите использование статического класса:

public static class ReturnValue
{
    public const int Success = 0;
    public const int FailReason1 = 1;
    public const int FailReason2 = 2;
    //Etc...
}

Это позволяет вам это сделать.

public static int main(string[] args){
    return ReturnValue.Success;
}

EDIT

Когда вы do хотите указать значения для перечисления, это когда вы хотите их комбинировать. См. Приведенный ниже пример:

[Flags] // indicates bitwise operations occur on this enum
public enum DaysOfWeek : byte // byte type to limit size
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64,
    Weekend = Sunday | Saturday,
    Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday
}

Это перечисление затем может быть использовано с использованием побитовой математики. См. Пример ниже для некоторых приложений.

public static class DaysOfWeekEvaluator
{
    public static bool IsWeekends(DaysOfWeek days)
    {
        return (days & DaysOfWeek.Weekend) == DaysOfWeek.Weekend;
    }

    public static bool IsAllWeekdays(DaysOfWeek days)
    {
        return (days & DaysOfWeek.Weekdays) == DaysOfWeek.Weekdays;
    }

    public static bool HasWeekdays(DaysOfWeek days)
    {
        return ((int) (days & DaysOfWeek.Weekdays)) > 0;
    }

    public static bool HasWeekendDays(DaysOfWeek days)
    {
        return ((int) (days & DaysOfWeek.Weekend)) > 0;
    }
}
23
задан Paul Ruiz 11 June 2013 в 19:51
поделиться

6 ответов

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

https://github.com/square/picasso

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

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

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

49
ответ дан dnkoutso 11 June 2013 в 19:51
поделиться

Мой пример:

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);
16
ответ дан Glorfindel 11 June 2013 в 19:51
поделиться

Вы можете попытаться добавить «глобального» слушателя.

    // 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

5
ответ дан Anton Malmygin 11 June 2013 в 19:51
поделиться

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

private void getAvatar(){
        Picasso.with(this)
                .load(Links.GET_AVATAR + ".jpg")
                .into(imgUserAvatar, new Callback() {
                    @Override
                    public void onSuccess() {

                    }

                    @Override
                    public void onError() {
                        imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
                    }
                });
}
2
ответ дан Hadi Note 11 June 2013 в 19:51
поделиться

Мой ответ:

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);
            }
        });
4
ответ дан TVT. Jake 11 June 2013 в 19:51
поделиться

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

1
ответ дан me_ 11 June 2013 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: