Obtenez de l'image Bitmap à partir d'ImageView chargé avec Picasso

J'avais une méthode qui charge les images, si l'image n'a pas été chargé avant, il va chercher sur un serveur. Puis il stocke dans les applications de système de fichiers. Si il est dans le système de fichiers, il charge l'image plutôt que c'est beaucoup plus rapide que de tirer les images à partir du serveur. Si vous avez chargé l'image avant sans fermer l'application, elle sera stockée dans un dictionnaire statique de sorte qu'il peut être rechargé sans utiliser plus de mémoire, afin d'éviter des erreurs de mémoire insuffisante.

Tout cela a bien fonctionné jusqu'à ce que j'ai commencé à utiliser le Picasso de l'image de chargement de la bibliothèque. Maintenant, je suis le chargement des images dans une ImageView mais je ne sais pas comment faire pour obtenir l'image qui est renvoyée pour que je puisse le stocker dans un fichier ou le dictionnaire statique. Cela a rendu les choses plus difficiles. car cela signifie qu'il essaie de charger l'image depuis le serveur à chaque fois, ce qui est quelque chose que je ne veux pas arriver. Est il possible que je peux obtenir de l'image Bitmap après le chargement dans l'ImageView? Ci-dessous mon code:

public Drawable loadImageFromWebOperations(String url,
        final String imagePath, ImageView theView, Picasso picasso) {
    try {
        if (Global.couponBitmaps.get(imagePath) != null) {
            scaledHeight = Global.couponBitmaps.get(imagePath).getHeight();
            return new BitmapDrawable(getResources(),
                    Global.couponBitmaps.get(imagePath));
        }
        File f = new File(getBaseContext().getFilesDir().getPath()
                .toString()
                + "/" + imagePath + ".png");

        if (f.exists()) {
            picasso.load(f).into(theView);
            **This line below was my attempt at retrieving the bitmap however 
            it threw a null pointer exception, I assume this is because it 
            takes a while for Picasso to add the image to the ImageView** 
            Bitmap bitmap = ((BitmapDrawable)theView.getDrawable()).getBitmap();
            Global.couponBitmaps.put(imagePath, bitmap);
            return null;
        } else {
            picasso.load(url).into(theView);
            return null;
        }
    } catch (OutOfMemoryError e) {
        Log.d("Error", "Out of Memory Exception");
        e.printStackTrace();
        return getResources().getDrawable(R.drawable.default1);
    } catch (NullPointerException e) {
        Log.d("Error", "Null Pointer Exception");
        e.printStackTrace();
        return getResources().getDrawable(R.drawable.default1);
    }
}

Toute aide serait grandement appréciée, merci!!!!

Picasso ne pas charger les images à partir du Serveur à chaque fois. Uniquement sur le premier temps, puis il se charge à partir du répertoire du cache.

OriginalL'auteur shadowarcher | 2014-07-10