ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – Volley – NetworkImageView有时候不显示错误图像?

2019-08-31 22:22:41  阅读:270  来源: 互联网

标签:internet-connection android error-handling android-volley networkimageview


所以我决定尝试新的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();
    }
}

附:如果你想看到NetworkImageView的代码,我认为它可用here.

解决方法:

我认为问题在于凌空无法帮助您重新加载图像.

快速检查显示NetworkImageView仅在调用onLayout方法时加载数据,并且方法loadImageIfNecessary将在必要时对网络请求进行排队.

当没有Internet连接时,将调用错误回调,并且一旦Internet连接自身就没有进一步的操作.

但是,由于您在列表中有NetworkImage,当您滚动列表时,我想您将重用单元格视图并再次调用setImageURL.如果Internet连接可用,则将自动加载图像.或者,一旦Internet连接启动,您可以刷新列表视图,以便自动加载图像.

标签:internet-connection,android,error-handling,android-volley,networkimageview
来源: https://codeday.me/bug/20190831/1778903.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有