问题是以上的整个过程非常缓慢首先,使用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;
}
}
}
如何下载而不在网格视图中显示图像。
使用Picasso / Glide将图像网址加载到图像视图中
val placeImage= itemView.findViewById<ImageView>(R.id.place_image)
Picasso.with(context).load(Uri.parse(data.url)).into(placeImage)