从Android中的Firebase存储下载图像

从Android中的Firebase存储下载图像,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,所以我尝试从Firebase存储下载一个图像。我试着按照Firebase在其网站上推荐的方式来做。在下面我向您展示了我的代码,但是有一个问题。下载图像时,我有一个OnSuccessListener。我对它应用了Log.d,所以我知道它会被触发。但是我找不到我试图在智能手机上下载的图像 这是我的代码: StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(photoURL); f

所以我尝试从Firebase存储下载一个图像。我试着按照Firebase在其网站上推荐的方式来做。在下面我向您展示了我的代码,但是有一个问题。下载图像时,我有一个
OnSuccessListener
。我对它应用了Log.d,所以我知道它会被触发。但是我找不到我试图在智能手机上下载的图像

这是我的代码:

StorageReference storageReference = FirebaseStorage.getInstance().getReferenceFromUrl(photoURL);

final File imageFile = new File(Environment.getExternalStorageDirectory()
                         .getAbsolutePath() + "/MyFolder/");

storageReference.getFile(imageFile).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.GONE);
 }
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.VISIBLE);
}
}).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {
     int progress = (int) ((100 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount());
     holder.progressBar.setProgress(progress);
}
});
StorageReference-StorageReference=FirebaseStorage.getInstance().getReferenceFromUrl(photoURL);
最终文件imageFile=新文件(Environment.getExternalStorageDirectory())
.getAbsolutePath()+“/MyFolder/”;
storageReference.getFile(imageFile).addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时公共无效(FileDownloadTask.TaskSnapshot TaskSnapshot){
holder.progressBar.setVisibility(View.GONE);
holder.downloadBtn.setVisibility(View.GONE);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
holder.progressBar.setVisibility(View.GONE);
holder.downloadBtn.setVisibility(View.VISIBLE);
}
}).addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(FileDownloadTask.TaskSnapshot TaskSnapshot){
int progress=(int)((100*taskSnapshot.GetByTestTransferred())/taskSnapshot.getTotalByteCount());
holder.progressBar.setProgress(进度);
}
});

我看到您没有将I.T保存为图像文件

试试这个

@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
     holder.progressBar.setVisibility(View.GONE);
     holder.downloadBtn.setVisibility(View.GONE);

    String filename = "yourfilename.png";
    File sd = Environment.getExternalStorageDirectory(); //You might wanna add something to sd that leads to your preferred path e.g /DCIM or /camera.
    File dest = new File(sd, filename);

    Bitmap bmp = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
    try {
         FileOutputStream out = new FileOutputStream(dest);
         bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
         out.flush();
         out.close();
    } catch (Exception e) {
         e.printStackTrace();
    }
 }
最好替换

final File imageFile = new File(Environment.getExternalStorageDirectory()
                     .getAbsolutePath() + "/MyFolder/");
为此:

final File imageFile= File.createTempFile("images", "jpg");

你能把你的代码加入我的吗。我真的不知道该把这个代码片段放在哪里。谢谢你,卡尔。好了:)