2017-08-12 1 views
1

Im utilisant Glide de l'interface utilisateur Firebase pour lier un ImageView à mon stockage Firebase. Maintenant, cela fonctionne bien, mais je suis en train de mettre en œuvre une mise à jour où les utilisateurs peuvent changer leur image de profil, le nom de l'image et le chemin reste le même. Soit mon anglais est faible pour comprendre la documentation de Glide ou il n'y a tout simplement pas moyen de reconnaître les mises à jour de Glide. J'ai lu quelque chose sur les demandes ici http://bumptech.github.io/glide/doc/options.html mais je ne peux pas le comprendre.Firebase UI - View ne met pas à jour

Définir l'arbitre droite:

this.profileRef = this.mStorageRef.child("images").child(FirebaseAuth.getInstance() 
      .getCurrentUser().getUid()).child("Profile"); 

appel de la fonction onCreate:

Glide.with(getContext()) 
      .using(new FirebaseImageLoader()) 
      .load(profileRef) 
      .into(this.imgProfile); 

Mais ne sais pas comment dire Glide de mettre à jour l'image, dans le code ci-dessous je viens frustré et essayé pour régler à nouveau le Glide, mais comme attendu, il n'a rien fait, le ImageView est encore en train de charger l'Image Cache. Rien ne se passe aussi lorsque j'ai essayé Glide.clear (voir). Peut-être que quelqu'un a déjà fait face à ce problème peut m'aider.

profileRef.putFile(file).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        Glide.with(getContext()) 
          .using(new FirebaseImageLoader()) 
          .load(profileRef) 
          .into(imgProfile); 
       } 
      }); 

Répondre

0

Résolu après un certain temps. Glide ne peut pas reconnaître les modifications, si le nom reste le même ou si l'URL reste la même. Vous devez donc invalider le cache en mettant une signature sur votre image. Lisez ici plus son sujet: https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation

Glide.with(getContext() /* context */) 
      .using(new FirebaseImageLoader()) 
      .load(profileRef) 
      .signature(new StringSignature(getCurrentTimeStamp())) 
      .into(this.imgHeader); 

public static String getCurrentTimeStamp(){ 
    try { 

     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String currentDateTime = dateFormat.format(new Date()); // Find todays date 

     return currentDateTime; 
    } catch (Exception e) { 
     e.printStackTrace(); 

     return null; 
    } 
+0

Correction: Je l'ai remplacé le getCurrentTimeStamp() avec UUID dans SharedPreferences, son une sorte de versioning. Je l'ai fait parce que dans le code ci-dessus, Glide télécharge toujours les images! – niksn