Volley - NetworkImageView sometimes doesn't show the error image?
所以我决定试用 Google IO 2013 上显示的新 Volley 库。
我已经尝试过使用
它运行良好并显示图像,但如果我让它下载图像,然后在下载过程中关闭 WiFi,它不会显示错误,就好像一切仍在加载一样。不仅如此,如果我恢复连接,它不会恢复加载。
为什么会发生,我该如何解决?也许它实际上是一个错误?
这是我的示例代码,如果有人想试试的话(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | public class MainActivity extends Activity { private static final int COLUMNS_COUNT = 4; private RequestQueue _requestQueue; private ImageLoader _imageLoader; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); _requestQueue=Volley.newRequestQueue(this); _imageLoader=new ImageLoader(_requestQueue, new BitmapLruCache()); final GridView gridView = new GridView(this); gridView.setNumColumns(COLUMNS_COUNT); final int screenWidth = getResources().getDisplayMetrics().widthPixels; gridView.setAdapter(new BaseAdapter() { @Override public View getView(final int position, final View convertView, final ViewGroup parent) { NetworkImageView rootView = (NetworkImageView) convertView; if (rootView == null) { rootView = new NetworkImageView(MainActivity.this); rootView.setLayoutParams(new AbsListView.LayoutParams(screenWidth / COLUMNS_COUNT, screenWidth / COLUMNS_COUNT)); rootView.setScaleType(ScaleType.CENTER_CROP); rootView.setDefaultImageResId(android.R.drawable.sym_def_app_icon); rootView.setErrorImageResId(android.R.drawable.ic_dialog_alert); } final String url = getItem(position); rootView.setImageUrl(url, _imageLoader); return rootView; } @Override public long getItemId(final int position) { return 0; } @Override public String getItem(final int position) { return Images.imageThumbUrls[position]; } @Override public int getCount() { return Images.imageThumbUrls.length; } }); setContentView(gridView); } @Override protected void onStop() { _requestQueue.cancelAll(this); super.onStop(); } } |
附言如果你想看
我认为问题在于凌空无法帮助您重新加载图像。
快速检查表明 NetworkImageView 仅在调用 onLayout 方法时加载数据,并且方法 loadImageIfNecessary 将在必要时将网络请求排队。
当没有 Internet 连接时,将调用错误回调,并且一旦 Internet 自身连接就没有进一步的操作。
但是,由于列表中有 NetworkImage,因此当您滚动列表时,我想您将重用单元格视图并再次调用 setImageURL。如果 Internet 连接可用,图像将自动加载。或者,一旦 Internet 连接建立,您可以刷新列表视图,以便自动加载图像。