我正在尝试将图像从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) {
}
});
}
答案 0 :(得分:1)
在这里我只能假设StorageRef
是班级成员,因为您没有显示它被假冒的位置。在这种情况下,您的循环将在每次交互时覆盖StorageRef
,并且在循环结束后仅保留最后一个值。由于Glide是异步的,因此所有回调将在循环完成之后发生,并且它们都将使用StorageRef
的最后一个值。
您应该做的是使StorageRef
成为最终的局部变量,以免每次循环都不会覆盖它:
final StorageReference StorageRef =
mySTORAGE.getReferenceIMAGE_PATH + dataHolder.getTitle() + "/" + i + ".png");