Volley; How many times did onResponse fire in ImageLoader.ImageListener?

I use Volleyto make internet requests. I think the method onResponseshould only be called once when you get the answer, but I found it twice.

here is my code:

YVolley.getInstance(context).getImageLoader().get(category.child.get(i).icon, new ImageLoader.ImageListener() {
                @Override
                public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                    Drawable drawable = new BitmapDrawable(context.getResources(), response.getBitmap());
                    drawable.setBounds(0, 0, GeneralUtil.dip2px(context, 45), GeneralUtil.dip2px(context, 45));
                    button.setCompoundDrawables(null, drawable, null, null);
                    Log.i("swifter", "get icon ... success == "+url);
                }

                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.i("swifter", "get drawable icon error...");
                }
            });

A success magazine has been successfully printed twice.

Is something wrong with my code, or should it be like that?

+4
source share
1 answer

I found the answer to this question in the documentation forImageLoader.java . The documentation states:

Call flow:

  • onResponse(response, true), , . , response.getBitmap() .

  • :

    • onResponse(response, false) , ,
    • onErrorResponse , .

. .

:

  • onRespsonse(response, true) , response.getBitmap().

:

  • onRespsonse(response, true), response.getBitmap() null.

  • onRespsonse(response, false), response.getBitmap().

:

  • onRespsonse(response, true), response.getBitmap() null.

  • onErrorResponse(error), error ( VolleyError).


"" :

@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
    // skip cache failure
    if (isImmediate && response.getBitmap() == null) return;

    // ...
}

, , .

+10

All Articles