如何在GridView中显示URL中的图像而不下载它们?

问题描述 投票:0回答:1

问题是以上的整个过程非常缓慢首先,使用AsyncTask类(DownloadTask)下载Websource。其次,图像的URL被下载并添加到ArrayList(URLsList)中。第三,针对Arraylist中的每个URL,下载图像(使用ImageDownloadTask)。第四,将每个图像添加到ArrayList(ImagesList)。第五,带有基本适配器的图像显示在gridView中。这整个过程非常缓慢。如何使其快速?或如何直接将图像传递到Gridview而无需下载。下面是代码。

private void GetImageList() {
// This method download image from URL Using AsyncTask
        ImageDownloadTask ImageTask;
        Bitmap Image;
        int i = 0;

        try {
            while (i < URLsList.size()) {

                ImageTask = new ImageDownloadTask();
                Image = ImageTask.execute(URLsList.get(i)).get();
                ImagesList.add(Image);
                i = i + 1;
                //Log.i("Images:" ,i + " Added");

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    public void GetAllURLs() {
// This method download webSource and fetch URLs Using AsyncTask
        DownloadTask task = new DownloadTask();
        String linkToImageUrlSource = null;
        try {
            //showDialog(progress_bar_type);

            linkToImageUrlSource = task.execute("https://posh.in/kandasar").get();
            Pattern p = Pattern.compile("<a href=\"(.*?)\" class=\"image-container\"");
            Matcher m = p.matcher(linkToImageUrlSource);

            while (m.find()) {
                DownloadTask task2 = new DownloadTask();
                String imageUrlSource = null;
                try {
                    imageUrlSource = task2.execute(m.group(1)).get();
                    Pattern p1 = Pattern.compile("class=\"image-viewer-main image-viewer-container\"><img src=\"(.*?)\"");
                    Matcher m1 = p1.matcher(imageUrlSource);
                    while (m1.find()) {
                        //Log.i("URL: ", m1.group(1));
                        AdURLsList.add(m1.group(1));
                    }

                    p1 = Pattern.compile("alt=\"(.*?)\" width");
                    m1 = p1.matcher(imageUrlSource);
                    while (m1.find()) {
                        //Log.i("DESC: ", m1.group(1));
                        AdImagesDescList.add(m1.group(1));
                    }

                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }



// BaseAdpater

    public class ImageAdapater extends BaseAdapter {
        @Override
        public int getCount() {
            return AdImagesList.size();
        }

        @Override
        public Object getItem(int i) {
            return AdImagesList.get(i);
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View galleryView = null;

            if (galleryView == null) {
                galleryView = getLayoutInflater().inflate(R.layout.layout_for_gridview, viewGroup, false);
                ImageView sampleImage = (ImageView) galleryView.findViewById(R.id.adImage);
                sampleImage.setImageBitmap(AdImagesList.get(i));
            }

            return galleryView;
        }
    }



    class DownloadTask extends AsyncTask<String, Void, String> implements com.example.urlapplication.DownloadTask {


        @Override
        protected String doInBackground(String... urls) {
            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;

            try {
                url = new URL(urls[0]);
                urlConnection = (HttpURLConnection) url.openConnection();
                InputStream in = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(in);
                int data = reader.read();
                while (data != -1) {
                    char current = (char) data;
                    result = result + current;
                    data = reader.read();
                }
                return result;
            } catch (Exception e) {
                e.printStackTrace();
                return "FAILED";
            }

        }

    }

    class ImageDownloadTask extends AsyncTask<String, Void, Bitmap> {

        @Override
        protected Bitmap doInBackground(String... urls) {
            try {
                URL url = new URL(urls[0]);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.connect();
                InputStream inputStream = connection.getInputStream();
                Bitmap adBitmap = BitmapFactory.decodeStream(inputStream);
                return adBitmap;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

    }

如何下载而不在网格视图中显示图像。

java android-studio gridview android-asynctask baseadapter
1个回答
0
投票

使用Picasso / Glide将图像网址加载到图像视图中

val placeImage= itemView.findViewById<ImageView>(R.id.place_image)
Picasso.with(context).load(Uri.parse(data.url)).into(placeImage)

检查此链接:https://github.com/Krishnasony/TestApp

© www.soinside.com 2019 - 2024. All rights reserved.