因此,我尝试从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);
}
});
答案 0 :(得分:0)
我看到您没有将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");