看源码了解即可,
是的一样的
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse");
Bitmap bitmap = BitmapFactory.decodeStream(response.body().byteStream());
if (bitmap != null) {
putBitmapToCache(bitmap, url);
Log.i(TAG, "bitmap不为空");
} else {
Log.i(TAG, "bitmap为空");
}
}
});
上面这个方法的执行时异步的
然而在首次加载图片的时候bitmap == null 会调用系统的OKHTTP去下载图片(这里需要你断点一下是不是真的下载好了),假设下载成功了。但是在下载成功之前代码已经执行到了 view.setImageBitmap(getBitmapFromCache(url)); 这时候图片还没有下载好
/**
* 用来加载网络图片
* @param view
* @param url
*/
public void displayImage(ImageView view, String url) {
Bitmap bitmap = getBitmapFromCache(url);
if (bitmap != null) {
Log.i(TAG, "displayImage bitmap!=null");
view.setImageBitmap(bitmap);
} else {
Log.i(TAG, "displayImage bitmap==null");
downloadImage(view,url);
view.setImageBitmap(getBitmapFromCache(url));
}
}
正确的解决是当图片下载完成了,直接加载给view
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse");
Bitmap bitmap = BitmapFactory.decodeStream(response.body().byteStream());
if (bitmap != null) {
putBitmapToCache(bitmap, url);
displayImage(ImageView view, String url);
Log.i(TAG, "bitmap不为空");
} else {
Log.i(TAG, "bitmap为空");
}
}
});
这样就可以了
真的不懂
不懂啊