Question

J'essaie de charger une image distante d'un serveur et grâce à un grand nombre d'exemples de code sur stackoverflow j'ai une solution qui fonctionne dans 2 des 3 images. Je ne sais pas vraiment quel est le problème avec la troisième image et parfois, quand laissant tourner le code dans le débogueur l'image est en cours de chargement. Aussi, si je charge l'image de problème d'abord les deux autres images sont parfois chargées.

Voici le code:

public static Drawable getPictureFromURL(Context ctx, String url, final int REQUIRED_SIZE) throws NullPointerException {
    //Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    int scale = 1;
    if (o.outWidth > REQUIRED_SIZE) {
        scale = (int) Math.pow(2, (int) Math.round(Math.log(REQUIRED_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
    }
    Log.i(Prototype.TAG, "scale: "+scale); 

    //Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    Bitmap bmp;
    try {
        bmp = BitmapFactory.decodeStream((InputStream) Tools.fetch(url), null, o2);
        if(bmp!=null)
            return new BitmapDrawable(ctx.getResources(), bmp);
        else
            return null;
    } catch (Exception e) {
        Log.e(Prototype.TAG, "Exception while decoding stream", e);
        return null;
    }
}

Au cours de débogage j'ai découvert que o.outWidth est -1, ce qui indique une erreur, mais aucune exception est levée, donc je ne peux pas vraiment dire ce qui a mal tourné. Le InputStream retourne toujours une valeur valide, et je sais que l'image existe sur le serveur.

Meilleurs voeux, Daniel

Était-ce utile?

La solution

Je trouve la réponse ici et mis à jour la méthode de récupération à:

private static InputStream fetch(String address) throws MalformedURLException,IOException {
    HttpGet httpRequest = new HttpGet(URI.create(address) );
    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
    HttpEntity entity = response.getEntity();
    BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
    InputStream instream = bufHttpEntity.getContent();
    return instream;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top