Glide non aggiornando l’immagine di android stesso url?

Ho lo stesso url per un’immagine. Durante l’aggiornamento di questa immagine più di una volta si mostra l’immagine precedente. L’immagine e l’immagine della versione sul server è aggiornato, ma Glide non è mostrando la nuova immagine.Voglio ottenere una nuova immagine ogni volta e cache .

Glide.with(context)
        .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
        .placeholder(R.drawable.ic_profile).dontAnimate()
        .diskCacheStrategy(DiskCacheStrategy.SOURCE)
        .signature(new (SettingManager.getUserPictureVersion(context)))
        .into(ivUserProfilePhoto);

Posso riprodurre questo bug modificando internet ,su internet il suo cambio di immagine come previsto su internet restano stesso dopo 2 o 3 tentativi per cambiare immagine

 

8 Replies
  1. 23
    //Use bellow code, it work for me.Set skip Memory Cache to true. it will load the image every time.
    
     Glide.with(Activity.this)
    .load(theImagePath)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true)
    .into(myImageViewPhoto);
    • Grazie per la risposta ,ma questo non compilare mio requirnment
    • È necessario modificare l’url del server ogni volta, se si desidera caricare l’immagine ogni volta. un altro saggio Glide caricare la stessa immagine di prima, se l’URL non vengono modificate.
    • Il problema è l’url non può essere modificato
    • Il problema è che la tua foto sarà caricata ogni volta e questo può consumare tempo, in alcuni casi, in cui l’immagine è troppo grande, può anche portare alla timeout. Forse è una buona idea per salvare un valore booleano in sharedPreferences a dire quando l’uri deve essere ricaricato.
  2. 19

    Glide 4.x

    Glide.with(context)
         .load(imageUrl)
         .apply(RequestOptions.skipMemoryCacheOf(true))
         .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.NONE))
         .into(imageView);

    Glide 3.x

    Glide.with(context)
         .load(imageUrl)
         .skipMemoryCache(true)
         .diskCacheStrategy(DiskCacheStrategy.NONE)
         .into(imageView);
    • Non ha funzionato per me.
    • Funziona Perfettamente!!
    • Ha funzionato per me! grazie!
    • questo funziona bene per me in glide 4
  3. 6

    Questa è una vecchia questione, quindi sono sicuro che hai i fix da ora. Io credo, invece, sia delle grandi librerie(Picasso e Glide) ora il supporto di qualcosa di simile.

    Glide ha la sua firma API si potrebbe desiderare di guardare in:
    https://github.com/bumptech/glide/wiki/Caching-and-Cache-Invalidation

    Glide.with(yourFragment)
        .load(yourFileDataModel)
        .signature(new StringSignature(yourVersionMetadata))
        .into(yourImageView);

    Non ho avuto la possibilità di lavorare con questo me stesso, ma sembra come se avete bisogno di effettuare una chiamata per le API per ottenere la versione di Metadati, quindi una successiva chiamata a compiere.

    In alternativa, guardare in Etag.

    Buona fortuna!

  4. 5

    Quando l’immagine viene caricato per la prima volta, è memorizzato localmente in ciò che si chiama una memoria cache (o semplicemente una cache). Quando si fa richiesta per una seconda volta Glide recupera se dalla cache, come se fosse una richiesta, di successo.

    Questo è significato per molti buoni motivi, quali: la ripartizione del carico di lavoro del server, salvare i vostri utenti alcuni dati e offrendo loro un’esperienza utente uniforme da rispondere rapidamente.

    Ora, riguardo il tuo problema. È necessario disattivare la cache per forza Glide per recuperare l’immagine in remoto ogni volta che si chiede per esso. Basta effettuare le seguenti operazioni:

    Glide.with(context)
             .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
             .placeholder(R.drawable.ic_profile).dontAnimate()
             .diskCacheStrategy(DiskCacheStrategy.NONE)
             .skipMemoryCache(true)
             .signature(new (SettingManager.getUserPictureVersion(context)))
             .into(ivUserProfilePhoto);

    O utilizzare una firma unica per ogni immagine. (Un po ‘ sporca, ma fa il trucco)

    Glide.with(context)
             .load(Constants.COPY_LINK_BASE_URL + info.getDisplayPicture())
             .placeholder(R.drawable.ic_profile).dontAnimate()
             .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
             .into(ivUserProfilePhoto);

    Un altro modo pulito sarebbe configurare il quadro della strategia di cache nel tuo server e utilizzare .diskCacheStrategy(DiskCacheStrategy.SOURCE).

    Ulteriore lettura

    Glide cache API qui.

    • A causa requisito non riesco a caricare foto
    • Se la u vuole mantenere la cache, u può aggiungere un po ‘ di codice extra nel vostro server per vedere se l’immagine è cambiata o meno. Se ha cambiato la u sarà chiaro per la cache e caricare la versione aggiornata, se non solo recuperare dalla cache.
    • la firma viene da server che raccontano immagine url è cambiato
  5. 5

    Ho il mio caso Glide non riconoscere .signature(), in modo inoltre di @MGDavies del risposta è forse bisogno di qualcosa come questo

    //in kotlin
    Glide.with(context)
            .load("url")
            //using apply to RequestOptions instead signature directly
            .apply(RequestOptions().signature(ObjectKey("time that image was updated")))
            .into(thumb)
  6. 3

    Quando le nuove immagini vengono caricate o aggiornato, è possibile utilizzare riportate di seguito per eliminare Glide memoria e cache :

    |==| Chiara Glide memoria

     Glide.get(getApplicationContext()).clearMemory();

    |==| Chiara Glide Cache()

    void clearGlideDiskCache()
    {
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                Glide.get(getApplicationContext()).clearDiskCache();
            }
        }).start();
    }
  7. 3

    Ora Glide ultima versione, è necessario utilizzare RequestOption per cancellare la cache.

    RequestOptions options = new RequestOptions()
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .skipMemoryCache(true);

    O per ogni volta che carico foto devi usare un Stringa come signature.

    RequestOptions options = new RequestOptions()
    .signature(new StringSignature(String.valueOf(System.currentTimeMillis())));

    Infine:

    Glide.with(CompressSingleActivity.this)
    .applyDefaultRequestOptions(options)
    .load(currentFile)
    .into(currentImageView);
  8. 0

    è come il problema è legato al Glide Biblioteca stessa, ho trovato il trucco che può risolvere questo problema, basta mettere un numero a caso dopo il vostro URL di immagine come una query come un Esempio di codice riportato di seguito, è stato risolto il mio problema, spero che ti aiuta troppo

            Random random = new Random();
            int randomInt = random.nextInt();
            Glide.with(context)
                    .applyDefaultRequestOptions(new RequestOptions()
                            .circleCrop().diskCacheStrategy(DiskCacheStrategy.NONE))
                    .load(ConstantVars.BaseUrl + userModel.getAvatarURL() + "?" + randomInt)
                    .apply(new RequestOptions().error(R.drawable.himart_place_holder))
                    .into(imageViewProfile);

    farà scivolare a ricaricare l’immagine in qualsiasi momento, come non c’è cache a tutti di leggere.

Lascia un commento