如何改进我的代码以更有效地从远程服务器加载图像而没有 UI 延迟?

ams92

适配器为列表视图提供数据。但是当您上下滚动时,它会显示旧图像并需要几秒钟才能完成图像加载。第一次打开视图时确实如此。

public class BooksAdapter extends ArrayAdapter<Books> {


    public BooksAdapter(Activity context, ArrayList<Books> word) {
        super(context, 0, word);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // Check if the existing view is being reused, otherwise inflate the view
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_item, parent, false);
        }


        // Get the {@link AndroidFlavor} object located at this position in the list
        Books currentbook = getItem(position);


        TextView bookView = (TextView) listItemView.findViewById(R.id.bookTittle);
        String booktitle = currentbook.getBookName();
        bookView.setText(booktitle);

        TextView authorView = (TextView) listItemView.findViewById(R.id.authorname);
        String authorname = currentbook.getAuthorName();
        authorView.setText(authorname);

        ImageView imageurl = (ImageView) listItemView.findViewById(R.id.imageView);
        String imagelink = currentbook.getImageLink();

        ImageAsyncTask task = new ImageAsyncTask(imageurl);
        task.execute(imagelink);


        return listItemView;

    }

    private class ImageAsyncTask extends AsyncTask<String, Void, Bitmap> {

        private ImageView img;

        ImageAsyncTask(ImageView img) {
            this.img = img;
        }


        @Override
        protected Bitmap doInBackground(String... urls) {

            URL url = null;
            Bitmap bmp = null;

            try {
                url = new URL(urls[0]);
            } catch (MalformedURLException e) {
                Log.e(LOG_TAG, "Error with creating URL ", e);
            }
            try {
                bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (IOException e) {
                Log.e(LOG_TAG, "Problem retrieving the earthquake JSON results.", e);
            }

            return bmp;


        }


        @Override
        protected void onPostExecute(Bitmap data) {
            this.img.setImageBitmap(data);

        }

        @Override
        protected void onProgressUpdate(Void... values) {

        }

    }


}
弗拉季斯拉夫·谢尔巴科夫

我会推荐使用Glide来完成这项任务,而不是发明自行车。您只需致电GlideApp.with(this).load("http://url.com").into(imageView);,Glide 将为您完成所有工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章