working uploadtask tasksnapshot studio para not library how guardar getresult getdownloadurl example error descargar datos cannot android firebase firebase-storage

android - tasksnapshot - uploadtask getdownloadurl



taskSnapshot.getDownloadUrl() está en desuso (8)

Agregue el siguiente código:

Task<Uri> downUrl=taskSnapshot.getMetadata().getReference().getDownloadUrl(); Log.i("url:",downUrl.getResult().toString());

Hasta ahora, la forma de obtener la url del archivo en Storage en Firebase, solía hacer este taskSnapshot.getDownloadUrl , pero hoy en día está en desuso, ¿qué método debo usar?


Como Doug dice, deberás ejecutarlo dentro de una tarea

Aquí hay un indicio de cómo necesitas implementarlo.

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(); String downloadURL = downloadUri.toString(); } else { // Handle failures // ... } } });

Para obtener más información sobre cómo implementarlo, puede consultar esta pregunta de github que se abrió 7 días después de que respondí https://github.com/udacity/and-nd-firebase/issues/41


Este código funciona para mí.

Puedes probar.

package br.com.amptec.firebaseapp; import android.graphics.Bitmap; import android.net.Uri; import android.provider.ContactsContract; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.Query; import com.google.firebase.database.ValueEventListener; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import java.io.ByteArrayOutputStream; import java.util.UUID; public class MainActivity extends AppCompatActivity { private DatabaseReference reference = FirebaseDatabase.getInstance().getReference(); private FirebaseAuth auth = FirebaseAuth.getInstance(); private Button btnUpload; private ImageView imgPhoto; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnUpload = findViewById(R.id.btnUpload); imgPhoto = findViewById(R.id.imgPhoto); btnUpload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imgPhoto.setDrawingCacheEnabled(true); imgPhoto.buildDrawingCache(); Bitmap bitmap = imgPhoto.getDrawingCache(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] imageBytes = baos.toByteArray(); String fileName = UUID.randomUUID().toString(); StorageReference storageReference = FirebaseStorage.getInstance().getReference(); StorageReference images = storageReference.child("images"); StorageReference imageRef = images.child(fileName + ".jpeg"); UploadTask uploadTask = imageRef.putBytes(imageBytes); uploadTask.addOnFailureListener(MainActivity.this, new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Toast.makeText(MainActivity.this, "Upload Error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } }).addOnSuccessListener(MainActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { //Uri url = taskSnapshot.getDownloadUrl(); Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl(); while(!uri.isComplete()); Uri url = uri.getResult(); Toast.makeText(MainActivity.this, "Upload Success, download URL " + url.toString(), Toast.LENGTH_LONG).show(); Log.i("FBApp1 URL ", url.toString()); } }); } }); } }


No obtendrás la url de descarga de la imagen ahora usando

ImageUrl = taskSnapshot. getDownloadUrl () .toString (); este método está en desuso

En su lugar puedes usar el siguiente método

uniqueId = UUID.randomUUID().toString(); ur_firebase_reference = storageReference.child("user_photos/" + uniqueId); Uri file = Uri.fromFile(new File(mphotofile.getAbsolutePath())); UploadTask uploadTask = ur_firebase_reference.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 ur_firebase_reference.getDownloadUrl(); } }).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { if (task.isSuccessful()) { Uri downloadUri = task.getResult(); System.out.println("Upload " + downloadUri); Toast.makeText(mActivity, "Successfully uploaded", Toast.LENGTH_SHORT).show(); if (downloadUri != null) { String photoStringLink = downloadUri.toString(); //YOU WILL GET THE DOWNLOAD URL HERE !!!! System.out.println("Upload " + photoStringLink); } } else { // Handle failures // ... } } });

Puede seguir el progreso de la carga agregando escuchas de Progress,

uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { @Override public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount(); System.out.println("Upload is " + progress + "% done"); Toast.makeText(mContext, "Upload is " + progress + "% done", Toast.LENGTH_SHORT).show(); } }).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() { @Override public void onPaused(UploadTask.TaskSnapshot taskSnapshot) { System.out.println("Upload is paused"); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle unsuccessful uploads } }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // Handle successful uploads on complete // ... } });


Puede utilizar StorageReference.getDownloadUrl() . Tenga en cuenta que devuelve una Tarea, por lo que deberá recordar tratarla de forma asíncrona como lo hace con cualquier otra Tarea.


Utilice esta implementación para su uploadTask y funcionará. :)

uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl(); firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { String url = uri.toString(); Log.e("TAG:", "the url is: " + url); String ref = yourStorageReference.getName(); Log.e("TAG:", "the ref is: " + ref); } }); } });


Simplemente use una Tarea en lugar de ref.putFile (uriImage) .addOnSuccessListener (new OnSuccessListener () Hoy en día, las referencias de la base de firmas sugieren el uso de objetos Uploadtask

Lo he hecho así:

UploadTask uploadTask; uploadTask = storageReferenceProfilePic.putFile(uriProfileImage ); 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 storageReferenceProfilePic.getDownloadUrl(); } }).addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { if (task.isSuccessful()) { progressBarImageUploading.setVisibility(View.GONE); Uri downloadUri = task.getResult(); profileImageUrl = downloadUri.toString(); ins.setText(profileImageUrl); } else { // Handle failures // ... } } });

Observe estas líneas en el código anterior:

Uri downloadUri = task.getResult(); profileImageUrl = downloadUri.toString();

Ahora profileImageUrl contiene algo como " http: // adressofimage ", que es la url para acceder a la imagen

Ahora eres libre de usar String profileImageUrl como quieras. Por ejemplo, cargue la url en un ImageView usando las bibliotecas Glide o Fresco.


//Create an instance of StorageReference first (here in this code snippet, it is storageRef) StorageReference filepath = storageRef.child("images.jpg"); //If file exist in storage this works. filepath.getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() { @Override public void onComplete(@NonNull Task<Uri> task) { String downloadUrl = task.getResult().toString(); // downloadurl will be the resulted answer } });