gpt4 book ai didi

java - 以错误的顺序添加到 ArrayList 的位图

转载 作者:太空狗 更新时间:2023-10-29 14:07:41 25 4
gpt4 key购买 nike

我的数据库中有一篇文章,其中包含图像、标题和价格。我将标题和价格添加到他们的每个数组中,并且它们的顺序正确,因此价格与标题匹配。但是当我加载图像时,我会这样解码它:

    private Bitmap decodeFile(byte[] b) {
// Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(b, 0, b.length, o);

// The new size we want to scale to
final int REQUIRED_SIZE=200;

// Find the correct scale value. It should be the power of 2.
int scale = 1;
while(o.outWidth / scale / 2 >= REQUIRED_SIZE &&
o.outHeight / scale / 2 >= REQUIRED_SIZE) {
scale *= 2;
}

// Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeByteArray(b, 0, b.length, o2);
}

解码完成后,我将它添加到图像 ArrayList 中,如下所示:

imageList.add(bmp);

但是图像的价格和标题可以例如在价格和标题 ArrayLists 的索引 0 处,但图像可能比另一个图像解码慢,那么我如何让图像也添加到索引 0 处?这是我加载和添加的总代码:

    private void loadData(){
ParseQuery<ParseObject> query = ParseQuery.getQuery("Items");
query.setLimit(20);
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> itemList, ParseException e) {
if (e == null) {
Log.d("Parse", "Retrieved " + itemList.size() + " items");
itemsLoaded = itemList.size();
for (int i = 0; i < itemList.size(); i++){
pricesList.add(itemList.get(i).getInt("price"));
titlesList.add(itemList.get(i).getString("title"));
Log.d("Parse", "objectID = " + itemList.get(i).getObjectId());
}
} else {
Log.d("Parse", "Error: " + e.getMessage());
}
for (int j = 0; j < titles.size(); j++){
ParseQuery<ParseObject> query2 = ParseQuery.getQuery("Images");
query2.whereEqualTo("imageId", itemList.get(j).getObjectId());
query2.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> picList, ParseException e) {
if (picList.size() != 0){
ParseFile pFile = (ParseFile) picList.get(0).get("image");

pFile.getDataInBackground(new GetDataCallback() {
public void done(byte[] data, ParseException e) {
if (e == null) {
Log.d("Parse", "We've got data in data.");
Bitmap bmp = decodeFile(data);
imageList.add(bmp);
if (imageList.size() == titles.size())
updateGridView();
} else {
Log.d("test", "There was a problem downloading the data.");
}
}
});
}
Log.d("Parse", "Downloaded images = " + picList.size());
}
});
}
}

});
}

最佳答案

正如我所说:我会使用 Map,您可以在其中为每个值定义一个键。 key 可以是唯一的产品编号。如果您对所有单独的属性使用此策略,您将不受不同加载过程中的时间问题的影响。

其他答案中描述的技术在实现内存使用方面的最佳性能时非常有趣。延迟加载可能需要更长的时间才能实际显示图像,但它会节省您的工作内存,因为您不会将所有图像都放在内存中。

关于java - 以错误的顺序添加到 ArrayList 的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672226/

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