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());
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
}
});