Vraag Picasso-bibliotheek, Android: Foutluisteraar gebruiken


Ik speel wat rond met de Picasso-bibliotheek voor het laden van afbeeldingen, maar ik kom een ​​probleem tegen. Wanneer een afbeelding niet kan worden geladen, wil ik de weergave verbergen in plaats van een standaardafbeelding te laden. Ik merkte aan de bron dat het lijkt alsof de enige manier om een ​​luisteraar toe te voegen afkomstig is van de builder, maar de foutmethode wordt nooit aangeroepen als een afbeelding niet laadt. Heeft iemand hier enige ervaring mee?

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

21
2018-06-11 19:51


oorsprong


antwoorden:


Met Picasso 2.0 kunt u een terugbelopdracht aan een verzoek koppelen.

https://github.com/square/picasso

De callback die u gebruikt, is bedoeld voor de "global" -luisteraar en helpt u fouten te debuggen die mogelijk optreden als gevolg van een netwerkbelasting.

Gebruik load(url).into(view, new Callback() {...}); in Picasso 2.0.

Vergeet niet om aan te roepen cancelRequest(target) als u een gebruikt Callback.


45
2017-07-30 06:37



Mijn voorbeeld:

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
2017-07-24 10:57



U kunt proberen een 'globale' luisteraar toe te voegen.

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

Alle volgende oproepen naar Picasso.with(Context context) retourneert het exemplaar dat is verbonden met de luisteraar, dus alle fouten worden vastgelegd.

Houd er rekening mee dat u moet bellen setSingletonInstance zo snel mogelijk, b.v. in toepassing onCreate.

Postscriptum Code aangenomen vanaf hier - Picasso aanpassen met Picasso.Builder


5
2018-06-01 13:42



Mijn antwoord:

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
2017-10-30 04:02



Gewoon een suggestie, maar je zou problemen in de programmering kunnen vermijden als je een "leeg" png-bestand maakt en dit instelt als het standaard afbeeldingsbestand in je map met bestanden ... nogal gek dat ik weet ... maar waarschijnlijk zonder te vechten. .


1
2017-10-22 13:38



Toen we een fout kregen, gaat de fout naar OnError methode dan pakken we het aan!

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

1
2017-09-19 19:16