所以我决定尝试Volley library所示的新Google IO 2013。
我在使用NetworkImageView
的简单解决方案在GridView
上展示多个图片时尝试过。
它运行良好并显示图像,但如果我让它下载图像然后我在下载期间关闭WiFi,它不会显示错误,好像一切仍然加载。不仅如此,如果我恢复连接,它也不会恢复加载。
为什么会发生,我该如何解决?也许它实际上是一个错误?
以下是我的示例代码,如果有人想尝试一下(BitmapCacheLru
代码here):
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();
}
}
P.S。如果您想查看NetworkImageView
的代码,我认为它可用here。
答案 0 :(得分:5)
我认为问题在于凌空无法帮助您重新加载图像。
快速检查显示 NetworkImageView 仅在调用onLayout方法时加载数据,并且方法 loadImageIfNecessary 将在必要时对网络请求进行排队。
当没有Internet连接时,将调用错误回调,并且一旦Internet连接自身就没有进一步的操作。
但是,由于您在列表中有NetworkImage,当您滚动列表时,我想您将重用单元格视图并再次调用setImageURL。如果Internet连接可用,则将自动加载图像。或者,一旦Internet连接启动,您可以刷新列表视图,以便自动加载图像。