我正在尝试将图像从Glide存储到Firebase存储,但仅存储了最后一个图像。
for (i = 0; i < imageFileList.size(); i++) {
StorageRef = mySTORAGE.getReferenceIMAGE_PATH + dataHolder.getTitle() + "/" + i + ".png");
Glide.with(this).asBitmap().load(imageFileList.get(i).getAbsolutePath()).into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
stream = new ByteArrayOutputStream();
resource.compress(Bitmap.CompressFormat.JPEG, 20, stream);
byte[] byteArray = stream.toByteArray();
StorageRef.putBytes(byteArray);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
}
我在这里只能假定StorageRef
是类成员,因为您没有显示它的伪造位置。如果是这种情况,您的循环将在每次插入时覆盖StorageRef
,并且在循环结束后仅保留最后一个值。由于Glide是异步的,因此所有回调将在循环完成后发生,并且它们都将使用StorageRef
的最后一个值。
您应该做的是将StorageRef
设置为最终的局部变量,以免每次循环都不会覆盖它:
final StorageReference StorageRef =
mySTORAGE.getReferenceIMAGE_PATH + dataHolder.getTitle() + "/" + i + ".png");