gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:47:02 25 4
gpt4 key购买 nike

问题是上面的整个过程非常慢首先,使用 AsyncTask 类 (DownloadTask) 下载 websource。其次,下载图像的 URL 并将其添加到 ArrayList (URLsList) 中。第三,下载 Arraylist 中的每个 URL 图像(使用 ImageDownloadTask)。第四,将每个图像添加到ArrayList(ImagesList)中。第五,使用baseadapter 图像显示在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;
}
}

}

如何在 gridview 中显示图像而不下载它。

最佳答案

使用Picasso/Glide加载图片url到图片View

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

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

关于java - 如何在 GridView 中显示 URL 中的图像而不下载它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61752759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com