2 votes

Lors de la récupération d'une url stockée dans la base de données Firebase, l'application se ferme en donnant l'erreur Can't convert object of type java.lang.String to type Android.net.Uri.

J'ai ajouté l'URL de l'image dans la base de données Firebase et lorsque j'essaie de récupérer cette URL, l'application se bloque. Voici le code de mon écouteur d'événements :

DatabaseReference valueRef = myRef.child("Users").child(name);
                valueRef.child("ProfileUrl").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        photoUrl= dataSnapshot.getValue(Uri.class);
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });

L'erreur se situe à la 5e ligne où photoUrl est utilisé.

J'ai défini myRef = database.getReference() ; et également indiqué photoUrl comme Uri. Mais il est toujours dit qu'il ne peut pas convertir la chaîne en Uri. Je ne comprends pas quand tout est en uri, d'où vient la chaîne ?

Capture d'écran de la base de données Firebase : enter image description here

2voto

Levi Moreira Points 8961

Vous devriez d'abord l'obtenir sous forme de chaîne de caractères, puis l'analyser en URI. La classe URI est bien plus qu'une simple chaîne d'URL, c'est pourquoi vous obtenez une erreur can't cast. Ce que vous avez dans votre base de données est une chaîne représentant une URL.

  public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      String url = dataSnapshot.getValue(String.class);
      photoUrl=  Uri.parse( url );
      Log.d("PHOTOURL", photoUrl.toString());
 }

Si vous voulez utiliser photoUrl en dehors de la fonction onDataChande, vous devez appeler une méthode ou écrire votre code d'utilisation dans onDataChange :

  public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      String url = dataSnapshot.getValue(String.class);
      photoUrl=  Uri.parse( url );
      usePhotoUrl();
 }

Utilisez-le ensuite dans la méthode :

 public void usePhotoUrl(){
   //you can use phootUrl here
 }

1voto

Safal Sharma Points 247

Faites-le comme ça :)

String url = (String) dataSnapshot.getValue();
photoUri = Uri.parse(url);

1voto

Raj Points 2434
DatabaseReference valueRef = myRef.child("Users").child(name);
valueRef.addListenerForSingleValueEvent(new ValueEventListener(){
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Uri photoUrl= Uri.parse(dataSnapshot.child("ProfileUrl").getValue().toString());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X