L. *_*ter 4 android android-intent android-volley
我' Volley用来做互联网请求.我认为该onResponse方法只应在收到响应时调用一次,但我发现它被调用了两次.
这是我的代码:
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...");
}
});
Run Code Online (Sandbox Code Playgroud)
"成功"日志打印两次.
我的代码有问题还是应该是这样的?
Mar*_*her 10
我在文档中ImageLoader.java找到了答案.文件说明:
呼叫流程如下:
在附加到请求后,
onResponse(response, true)将调用它以反映已经可用的任何缓存数据.如果数据可用,response.getBitmap()则将为非null.网络响应返回后,只会发生以下一种情况:
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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于澄清为什么您可能会收到两个对您的请求的回复.
| 归档时间: |
|
| 查看次数: |
1105 次 |
| 最近记录: |