2010-09-22 8 views
1

J'utilise le code suivant pour récupérer des images sur le Web. Il utilise Gridview et, selon sa position, choisit une URL dans un tableau. Cela fonctionne mais le chargement des images est souvent aléatoire. Presque chaque fois que je démarre l'application, un nombre différent d'images se chargent. Il y a aussi des problèmes quand on passe du mode portrait au mode paysage, 5 images sur 10 peuvent s'afficher alors je vais allumer l'appareil et je perds généralement toutes les images. Parfois, quelques-uns apparaissent.Extraction d'images à partir du Web

Des idées pour rendre cela plus robuste?

try { 
        URLConnection conn = aURL.openConnection(); 
        conn.connect(); 
        InputStream is = conn.getInputStream(); 
        BufferedInputStream bis = new BufferedInputStream(is); 
        Bitmap bm = BitmapFactory.decodeStream(bis); 
        bis.close(); 
        return bm; 
      } catch (IOException e) { 
        Log.d("DEBUGTAG", "error..."); 
      } 
      return null; 

Répondre

1

Une chose que je lis est qu'il ya un bug connu avec bitmaps de décodage d'un InputStream, et le correctif suggéré de Google était d'utiliser un FlushedInputStream (exemple ci-dessous URL):

http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

En outre, je mettrais le code de téléchargement dans un AsyncTask. Voici ce que j'utilise actuellement pour le mien:

public static Bitmap loadImageFromUri(URI uri) 
    { 
     URL url; 
     try { 
      url = uri.toURL(); 
     } catch (MalformedURLException e) { 
      Log.v("URL Exception", "MalformedURLException"); 
      return null; 
     } 

     try 
     {   
      HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      return BitmapFactory.decodeStream(new FlushedInputStream(input)); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

Je passe juste dans une URI en raison de la façon dont j'ai le reste de mon code mis en place, vous pouvez passer dans une URL au lieu et sauter la première partie. Cela empêchera le téléchargement d'attacher votre thread d'interface utilisateur.

+0

merci, fonctionne parfaitement maintenant. – roger

Questions connexes