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 du Club
    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
    Points : 42
    Points
    42
    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 éminent

    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
    Points : 7 618
    Points
    7 618
    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
    Inscrit

    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
    Points : 892
    Points
    892
    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
    Inscrit

    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
    Points : 892
    Points
    892
    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 éminent

    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
    Points : 7 618
    Points
    7 618
    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