¿Cómo insertar la URL de la imagen en la base de datos de Firestore después de cargar una imagen en Android Studio?

Juan :

Creé una función de carga de imágenes en mi aplicación. La imagen se carga y se muestra al usuario y regresa "cargada" cuando se realiza correctamente.

Ahora, cuando el usuario cierra la aplicación y vuelve a abrir, no mostrará la imagen porque no está almacenada en su archivo de base de datos único en el campo de profileImage.

Estoy almacenando la imagen en el almacén de datos de almacenamiento.

Quiero almacenar la misma URL de imagen que se almacena en el almacenamiento para que esté en el campo de usuarios actuales en la base de datos.

Pero el código que escribí todavía no inserta el valor requerido de la URL de la imagen.

Aquí está mi código hasta ahora:

FirebaseFirestore fStore;
FirebaseStorage storage;
StorageReference storageReference;

FirebaseAuth fAuth;
String UID;
private Uri filePath;
private final int PICK_IMAGE_REQUEST = 71;


fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
storage = FirebaseStorage.getInstance();
storageReference = storage.getReference();



protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);

    userImage = findViewById(R.id.profile_userImg);

    userImage.setOnClickListener(new View.OnClickListener() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
        @Override
        public void onClick(View view) {
            chooseImage();
        }
    });

}



@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
private void chooseImage() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Choose a Profile Image"), PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {

        filePath = data.getData();
        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            userImage.setImageBitmap(bitmap);
            if (filePath != null) {
                StorageReference ref = storageReference.child("Users Profile/" + UUID.randomUUID().toString());
                ref.putFile(filePath).addOnSuccessListener(new OnSuccessListener < UploadTask.TaskSnapshot > () {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        UID = fAuth.getCurrentUser().getUid();
                        DocumentReference documentReference = fStore.collection("users").document(UID);
                        Map < String, Object > user = new HashMap < > ();
                        user.put("profileImage", PICK_IMAGE_REQUEST);
                        Toast.makeText(ProfileActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(ProfileActivity.this, "Failed", Toast.LENGTH_SHORT).show();
                    }
                });

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Oscar Alejandro Alvarez :

La ruta del archivo no se puede utilizar así, como referencia para descargar una imagen. En su lugar, necesita obtener una URL de descarga proporcionada por firebase, cambie su código de esta manera:

 StorageReference ref = storageReference.child("Users Profile/" + UUID.randomUUID().toString());
        UploadTask uploadTask = ref.putFile(filePath);

        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()) {
                    //here the upload of the image finish
                }

                // Continue the task to get a download url
                return ref.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    Uri downloadUri = task.getResult(); //this is the download url that you need to pass to your database
                    //Pass the url to your reference
                    UID = fAuth.getCurrentUser().getUid();
                    DocumentReference documentReference = fStore.collection("users").document(UID);
documentReference.update("profileImage", downloadUri);
                    Toast.makeText(ProfileActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();
                } else {
                    / Handle failures
                    // ...
                }
            }
        });

Puede ver con más detalle aquí: https://firebase.google.com/docs/storage/android/upload-files#java_1

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo