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 :

Afficher une image web sur mon application


Sujet :

Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 184
    Points : 87
    Points
    87
    Par défaut Afficher une image web sur mon application
    je n'arrive pas à afficher une image qui se trouve sur un serveur distant. Je m'explique. Je récupère des informations provenant de mon web service. De ces infos je construis un string que je parse en uri. Auriez-vous une solution pour cela. En faites je voudrais faire comme dans l'appli facebook. Sachant aussi que j'ai les droits sur le dossier qui contient les images.

    voici le code pour parser mon string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    final String position = intent.getExtras().getString("url");
    //récupération information gps photo
    //Url mon_uri = new Url();
    Uri myUri = Uri.parse(position);
    ImageView image = (ImageView)findViewById(R.id.image_v); image.setImageURI(myUri);
    Sachant que mon image est un imageView.

    L'erreur que j'ai est:
    java.io.filenotfoundexception........

    Merci à vous

    Loïc

  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
    Les "URI" gérées par ImageView ne peuvent être que locales...
    Il faut passer par un loader pour récupérer la bitmap, et la passer à l'ImageView.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 184
    Points : 87
    Points
    87
    Par défaut
    Merci beaucoup. Par contre maintenant je me demande comment est ce que je peux faire pour afficher une ou plusieurs photos d'un serveur ?
    Pour mon imageView c'est fais. Mais pour le griedview ......

    code pour l'imageView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ImageView image = (ImageView)findViewById(R.id.image_v);
    Bitmap bitmap = null;
    try {
           URL urlImage = new URL(position);
           HttpURLConnection connection = (HttpURLConnection) urlImage.openConnection();
    	InputStream inputStream = connection.getInputStream();
    	bitmap = BitmapFactory.decodeStream(inputStream);
    	image.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
    	e.printStackTrace();
    } catch (IOException e) {
    	e.printStackTrace();
    }
    Le loader ici est HttpURLConnect().

    Si quelqu'un à des propositions pour le gridview.

    Merci d'avance

    Loïc

  4. #4
    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
    Ce code me semble bizarre...
    Il est impossible de faire à la fois une ouverture de connexion internet (opération lente)
    Et un imageView.setDrawable() (opération uniquement dans le thread UI)

    Opération Lente + Thread UI
    Non seulement c'est interdit, mais en plus cela fera planter l'application sous Android 3+

    Quand je parlais de loader, je voulais vraiment dire "Loader" pas un truc qui load...http://developer.android.com/guide/c...s/loaders.html
    Au pire une AsyncTask....

    Il en est de même pour un AdapterView, il va falloir lire les images (probablement en batch) dans un loader spécifique... il doit exister des codes de drawable manager sur le net
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 184
    Points : 87
    Points
    87
    Par défaut
    Merci. Par contre figure toi que j'ai essayé sur un android 3.x et pas de pbl ???
    Bizarre je testerais sur une tablette avec un android 3.x.

    Par contre maintenant je suis bloqué sur l'affichage de mes images dans un listeview.

    Voici le code:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    // ************************** CHARGEMENT DES PHOTOS ************************** //
     
     	 	SoapObject requete_photo = new SoapObject(NAMESPACE, METHOD_GET_VISU_PHOTO);
     
     		requete_photo.addProperty("id_etape_serveur", id_etp);
     
     		.......
     
     		try {
     			 ......
     
     			  if (resultSOAP == null)
     				  Toast.makeText(Visuetape.this,"Rien reçu", Toast.LENGTH_LONG).show();
     			 Vector liste_events  = (Vector) resultSOAP.getProperty("return");
     			 ContentResolver cr = getContentResolver();
     			 int id_place = 0 ;
     			 int nbre_event = liste_events.size();
     			 for(int i = 0; i<nbre_event; i++){
     				 ContentValues newValues_part = new ContentValues();
     				 Partages mesEtapes = new  Partages();
     				 SoapObject event = (SoapObject) liste_events.get(i);
     			 	 int nbre_champs = event.getPropertyCount();
     			 		for(int j=0; j<nbre_champs; j++){
     			 			SoapObject champs = (SoapObject) event.getProperty(j);
     			 			String keys =  champs.getProperty("key").toString();			 					
     
     			 			if(keys.compareTo("id_photo_user")==0){	
     			 				id_photo = champs.getProperty("value").toString();
     			 			}
     			 			if(keys.compareTo("id_etape_photo")==0){	
     			 				id_etape = champs.getProperty("value").toString();
     			 			}
     			 			if(keys.compareTo("extension")==0){	
     			 				ext = champs.getProperty("value").toString();
     			 			}
     
     
     			 		}
    		 			String url_photo = id_photo+id_etp+"."+ext;
    		 			mesEtapes.setId_partage_uri_photo(url_photo);
    	 				newValues_part.put(PwtProvider.M_ID_PARTAGE_URI_PHOTO, url_photo);
    	 				newValues_part.put(PwtProvider.M_ID_SHOW_PARTAGE, id_place);
    	 				//
    	 				String _URL = "******://************************"+url_photo;
    	 				Bitmap _bmpImage = null;
    	 				try{
    	 				    URL ulrn = new URL(_URL);
    	 				    _bmpImage = BitmapFactory.decodeStream(ulrn.openConnection().getInputStream());    
            map.put("img", _bmpImage); 				   
            listItem.add(map);
    	 				    cr.insert(PwtProvider.CONTENT_URI_PARTAGES, newValues_part);
    	 				    id_place++;
    		 			} catch (MalformedURLException e) {
    		 			   e.printStackTrace();
    		 		    } catch (IOException e) {
    		 			   e.printStackTrace();
    		 		    }
     			    }
     			}catch (Exception e) {
     			  e.printStackTrace();
     			}
    Voici le code pour récupérer mes infos direct de mon web service.
    Avant pour déclarer mon listview, j'ai mets le code ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    maListViewPerso = (ListView) findViewById(R.id.listviewperso);
    //Création de la ArrayList qui nous permettra de remplire la listView
    ArrayList<HashMap<String, Bitmap>> listItem = new ArrayList<HashMap<String, Bitmap>>();
    //On déclare la HashMap qui contiendra les informations pour un item
    HashMap<String, Bitmap> map;
    //Création d'une HashMap pour insérer les informations du premier item de notre listView
    map = new HashMap<String, Bitmap>();
    Puis après la reception des infos par le w-s, là suite du code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem
    SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.photo_item,
    new String[] {"img"}, new int[] {R.id.img});
     
    //On attribut à notre listView l'adapter que l'on vient de créer
    maListViewPerso.setAdapter(mSchedule);
    Voilà si quelqu'un à des informations pour afficher mes images via mes URL, merci.

    Loïc

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 184
    Points : 87
    Points
    87
    Par défaut
    je réponds à ma question en faites je suis un tuto trouvé sur un autre site.

    Mais maintenant il ne m'intègre que la dernière photos. Voici le code qui intègre ça.
    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
    22
    23
    24
    25
    26
    27
    ContentResolver cr = getContentResolver();
    String photo = PwtProvider.M_ID_PARTAGE_ETAPE + " = 0 AND " + PwtProvider.M_ID_PARTAGE_VOYAGE + " = 0";
    String order = PwtProvider.M_ID_SHOW_PARTAGE + " ASC";
     		Cursor c = cr.query(PwtProvider.CONTENT_URI_PARTAGES,null,photo,null,order);
    if(c.moveToFirst()){
    	do{
    		try{
    		Bitmap _bmpImage = null;
    		String _URL = "http://*******"+c.getString(PwtProvider.M_ID_PARTAGE_URI_PHOTO_COLUMN);
    		URL ulrn = new URL(_URL.toString());
    		_bmpImage = BitmapFactory.decodeStream(ulrn.openStream());
    		map.put("img", _bmpImage);
    		} catch (MalformedURLException e) {
    	 	         e.printStackTrace();
    	 	} catch (IOException e) {
    	 		 e.printStackTrace();
    	 	}
     
                     listItem.add(map);
                     //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem
                     final SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.photo_item, new String[] {"img"}, new int[] {R.id.img});
     
                     //On attribut à notre listView l'adapter que l'on vient de créer
                     mSchedule.setViewBinder(new MyViewBinder()); 
                     maListViewPerso.setAdapter(mSchedule);
             }while(c.moveToNext());
    }
    Merci à vous d'avance.

    Loïc

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 184
    Points : 87
    Points
    87

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. rendre une image ''tactile'' sur mon mobile
    Par totooo dans le forum Java ME
    Réponses: 1
    Dernier message: 17/05/2009, 21h14
  2. Afficher une image aléatoirement sur un forum
    Par Lysgard dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2009, 14h32
  3. afficher une image jpeg sur un fichier text
    Par Sarah! dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2008, 18h00
  4. Réponses: 2
    Dernier message: 18/07/2007, 17h19
  5. Réponses: 1
    Dernier message: 09/12/2006, 23h52

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