IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

BitmapFactory.decodeStream return null


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 75
    Par défaut BitmapFactory.decodeStream return null
    Bonjour,

    Comme l'indique le titre, ma creation de bitmap via une url echoue et retourne nul.

    J'ai un des url d'image dans une liste ->

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    agenda.get(i).getPicture() // always return a good image url
    Dans unThread je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        for (int i = 0; i < agenda.size(); i ++)
            {
                Log.e("TEST", "  = " +agenda.get(i).getPicture());
                Bitmap newBitmap = getBitmapFromURL(agenda.get(i).getPicture()); // getPicture return the url
                imagelist.add(i,newBitmap);
            }
    et getBitmapFromURL return null a cause de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BitmapFactory.decodeStream(input)
    dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private Bitmap getBitmapFromURL(final String src) {
                try {
                    URL url = new URL(src);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setDoInput(true);
                    connection.connect();
                    InputStream input = connection.getInputStream();
                    myBitmap = BitmapFactory.decodeStream(input);
                    connection.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        return myBitmap;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream input = connection.getInputStream();
    fail aussi surement ....

    Si quelqu'un a une idee...

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    1. Remplace le e.printStackTrace par Log.e("MYTAG","Failed to load image",e);
    2. Rajoute des Log.d("MYTAG","Been here done that"); de temps en temps...
    3. Gère correctement les exceptions....

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private Bitmap getBitmapFromURL(final String src) throws Exception {
        Bitmap ret = null;
        URL url = new URL(src);
        HttpURLConnection connection = null;
        try {
             url = (HttpURLConnection) url.openConnection();
             connection.setDoInput(true);
             connection.connect();
             Log.d("MYTAG","Connected to "+url);
             InputStream input = connection.getInputStream();
             ret = BitmapFactory.decodeStream(input);
             Log.d("MYTAG","Bitmap decoded");
         } finally {
             connection.disconnect();
         }
        return ret;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for (int i = 0; i < agenda.size(); i ++)
    {
         String url = agenda.get(i).getPicture();
         Log.i("MYTAG", "Loading image "+url);
         try {
             Bitmap newBitmap = getBitmapFromURL(url);
             imagelist.add(i,newBitmap);
         } catch (Exception e) {
             Log.e("MYTAG","Failed to load image",e);
         }
    }
    Ensuite, poste nous le logcat (avec un filtre sur MYTAG) ...

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    A supposer que l'url retourné reference bien une image :
    Je voie pas aussi l'interet de declarer une exception deja catcher et pas renvoyée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    private Bitmap getBitmapFromURL(final String src) {
        Bitmap ret = null;
        URL url = new URL(src);
        HttpURLConnection connection = null;
        try {
             connection = (HttpURLConnection) url.openConnection();
           //  connection.setDoInput(true); //Je voie pas l'interet et c'est //optionnel.
           //  connection.connect(); // permet de connecter...or il est deja //connecté au ressource par openConnection
    //Si probleme de timeout ou de temps de lecture
             connection.setConnectTimeout(30000);
    	 connection.setReadTimeout(30000);
             Log.d("MYTAG","Connected to "+url);
             InputStream input = connection.getInputStream();
             ret = BitmapFactory.decodeStream(input);
             Log.d("MYTAG","Bitmap decoded");
         } finally {
             connection.disconnect();
         }
        return ret;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int agendaSize=agenda.size();
    for (int i = 0; i < agendaSize; i ++)
    {
         String url = agenda.get(i).getPicture();
         Log.i("MYTAG", "Loading image "+url);
         try {
             Bitmap newBitmap = getBitmapFromURL(url);
             imagelist.add(i,newBitmap);
         } catch (Exception e) {
             Log.e("MYTAG","Failed to load image",e);
         }
    }

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Ton code genera une erreur de nullpointerException : c'est pas url plutot connection
    Citation Envoyé par nicroman Voir le message
    1...

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    private Bitmap getBitmapFromURL(final String src) throws Exception {
        Bitmap ret = null;
        URL url = new URL(src);
        HttpURLConnection connection = null;
        try {
             url = (HttpURLConnection) url.openConnection();
    //will trow NullPointerException        
     connection.setDoInput(true);
             connection.connect();
             Log.d("MYTAG","Connected to "+url);
             InputStream input = connection.getInputStream();
             ret = BitmapFactory.decodeStream(input);
             Log.d("MYTAG","Bitmap decoded");
         } finally {
             connection.disconnect();
         }
        return ret;
    }
    [/code]

    Ensuite, poste nous le logcat (avec un filtre sur MYTAG) ...

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    oui oui un mauvais copier/coller, qui ne devrait même pas compiler de toute maniere (affectation d'une HttpUrlConnection à une URL ?)

    Pour le truc optionnel, j'ai juste recopié le code initialement posté

    L'exception n'est pas catchée justement pour être transmise à l'appelant. Le try/finally est là pour fermer la connexion en cas d'erreur justement (sinon, risque de fuite mémoire).

    Il y a certainement moyen de "réduire" les exceptions lancées, je n'ai pas regardé exactement ce qui pouvait l'être (certainement IOException, ...)

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/08/2014, 08h38
  2. BitmapFactory.decodeStream(.) qui retourne null ?
    Par Matf4ke dans le forum Android
    Réponses: 9
    Dernier message: 03/08/2012, 14h03
  3. GetDlgItem return NULL pointer
    Par karim2009 dans le forum Visual C++
    Réponses: 33
    Dernier message: 09/02/2009, 18h45
  4. getNamespaceURI return null
    Par *alexandre* dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 03/10/2007, 14h23
  5. Pointeur intelligent boost : return NULL ->comment faire?
    Par choinul dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 21/12/2005, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo