getDownloadUrl() method is deprecated after firebase update. What is the alternative code for this method?
public void createOrUpdatePostWithImage(Uri imageUri, final OnPostCreatedListener onPostCreatedListener, final Post post) {
// Register observers to listen for when the download is done or if it fails
DatabaseHelper databaseHelper = ApplicationHelper.getDatabaseHelper();
if (post.getId() == null) {
post.setId(generatePostId());
}
final String imageTitle = ImageUtil.generateImageTitle(UploadImagePrefix.POST, post.getId());
UploadTask uploadTask = databaseHelper.uploadImage(imageUri, imageTitle);
if (uploadTask != null) {
uploadTask.addOnFailureListener(exception -> {
// Handle unsuccessful uploads
onPostCreatedListener.onPostSaved(false);
}).addOnSuccessListener(taskSnapshot -> {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
LogUtil.logDebug(TAG, "successful upload image, image url: " + String.valueOf(downloadUrl));
post.setImagePath(String.valueOf(downloadUrl));
post.setImageTitle(imageTitle);
createOrUpdatePost(post);
onPostCreatedListener.onPostSaved(true);
});
}
}
Use this code I to get the ImagesUrl.
I hope it works!
I also got a repository on github for this, here is the link.
https://github.com/BVLD/Firebase-Storage-upload-and-retreive-images-android-studio
ImagesPath.putFile(mainImageURI).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
return ImagesPath.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downUri = task.getResult();
downUri.toString();
Related
This question already has an answer here:
getDownloadURL isn't inputting the link i need
(1 answer)
Closed 3 years ago.
I am trying to access the actual URL of uploaded image on firebase, but not getting.
Look at my code below:
String ActualImageUrl = null;
taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
{
#Override
public void onSuccess(Uri uri)
{
ActualImageUrl = uri.toString();
Log.d("okok","url inside: "+ActualImageUrl);
}
});
Log.d("okok","url ouside: "+ActualImageUrl);
okok: url inside: ACTUAL URL HERE
okok: url outside: null
From Firebase Official guide use this code to get download url
final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.putFile(file);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
} else {
// Handle failures
// ...
}
}
});
This is my approach to upload an image file and getting the download link
UploadTask uploadTask = profileImageRef.putBytes(data);
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
#Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
String fileUrl = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
Toast.makeText(UserProfile.this, "Uploaded Successfully!", Toast.LENGTH_SHORT).show();
}});
When I logged fileUrl it displays a String like this
com.google.android.gms.tasks.zzu#6ee8ba8
Someone please give me a solution to get the download url.
you can use this,
UploadTask uploadTask = profileImageRef.putBytes(data);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return profileImageRef.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
} else {
// Handle failures
// ...
}
}
});
In my project, I am able to getDownloadUrl() after uploading a file
ref.putFile(imgUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
if(task.getException() != null) {
throw task.getException();
}
}
return ref.getDownloadUrl();
}
}) ...
However, since I am resizing the image with a cloud function and re-uploading it to the bucket, the download url will change, so the only way to know the location of the image is through a StorageReference. How can I getDownloadUrl() from StorageReference? I've tried ref.getDownloadUrl().addOnSuccessListener which doesn't get fired and ref.getDownloadUrl().addOnCompleteListener and the task.getResult() throws an error.
Try using this :
I was trying to store images
You can get the download URL from task.getResult().toString()
final StorageReference ref = FirebaseStorage.getInstance().getReference().child("images").child(imageName)
uploadTask = ref.putBytes(data);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
String URL = task.getResult().toString();
} else {
// Handle failures
// ...
}
}
});
Retrieving images from Firebase does not work?
Hi I am working on upload and retrieve images from Firebase.
But taskSnapshot.getDownlaodUrl is currently deprecated.
So I use the alternative as answered in this question
taskSnapshot.getDownloadUrl() is deprecated
but none of these alternatives work for me.
#Override
public void onActivityResult( int requestCode,int resultcode,Intent data) {
super.onActivityResult(requestCode,resultcode,data);
if(requestCode==GALLERY_INTENT&&resultcode==RESULT_OK)
{ mbar.setVisibility(View.VISIBLE);
Uri uri=data.getData();
final StorageReference fileupload=mStorage.child("Photos").child(uri.getLastPathSegment());
fileupload.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>(){
#Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mbar.setVisibility(View.GONE);
Toast.makeText(MainActivity.this,"Succesfully Uploaded",Toast.LENGTH_SHORT).show();
Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();
Picasso.get().load(firebaseUri.getResult.toString()).into(image);
}
}
);
This is my code for upload and retrive the data.
It gives me error for Task is not yet Complete
and when i try another alternative
filepath.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
String downloadUrl = task.getResult().toString();
Picasso.get().load(downloadUrl).into(image);
}
});
It gives me error of Object does not exit
I am making a child reference for Photos and try to retrive the image.
Can anyone solve whats wrong in this code.
final StorageReference fileupload=mStorage.child("Photos").child(uri.getLastPathSegment());
UploadTask uploadTask = fileupload.putFile(file);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
Picasso.get().load(downloadUri.toString()).into(image);
} else {
// Handle failures
}
}
});
As referenced in firebase doc, I have to call getDownloadUrl() on the StorageReference after uploading file. So the task should be declared inside addOnSuccessListener?
final StorageReference ref = storageRef.child("your_REF");
uploadTask = ref.putFile(file);
Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
#Override
public Task<Uri> then(#NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
#Override
public void onComplete(#NonNull Task<Uri> task) {
if (task.isSuccessful()) {
Uri downloadUri = task.getResult();
} else {
// Handle failures
// ...
}
}
});
As far as I know the StorageReference.getDownloadUrl() can be called before the upload has finished, or even has been started. Of course the file at the download URL won't be available until the upload has been completed, so you'll want a flagging mechanism for that in completion listener for the upload task.