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

Composants graphiques Android Discussion :

Remplir les valeurs dans le Spinner


Sujet :

Composants graphiques Android

  1. #1
    Membre régulier Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Points : 99
    Points
    99
    Par défaut Remplir les valeurs dans le Spinner
    Bonsoir,
    J'ai réalisé le projet et j'ai développé pas mal. Malheureusement,j'ai un problème avec spinner,c'est quand je veux remplir les valeurs de ville (code postal et ville) dans spinner à partir de la base de données avec l'objet JSON et ça n'affiche pas dans un layout. J'ai cherché le site sur spinner et j'ai testé le bout de code en vain.
    Voici le bout de code nécessaire pour remplir un spinner de ville :
    C'est la classe FicheMedecin que j'ai de problème du 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
    private Spinner ville;
    		.....
    		@Override
    		protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    			ville = (Spinner)findViewById(R.id.spinnerVille);
    		try {
    			......
    			ArrayAdapter<Ville> adapter = new ArrayAdapter<Ville>(this, android.R.layout.simple_spinner_item);
    			adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    			List<Ville> villes = Engine.getEngine().getVilles();
    			for(Ville v : villes){
    				adapter.add(v);
    			}
    		} catch (EngineException e) {
    			e.printStackTrace();
    		}
    	}
    La classe Engine et je n'ai pas de souci avec cette classe mais ça peut vous aider savoir où ça mène à la classe FicheMedecin :
    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
    public ArrayList<Ville> getVilles() throws EngineException {
            if (!estAutentifier) {
                throw new EngineException("Vous devez êtres autentifier pour avoir accès!");
            }
            ArrayList<Ville> villes = new ArrayList<Ville>();
            try {
                String phraseJson = getJSON(LIEN + MEDECIN + "?nom=" + nom + "&prenom=" + prenom + "&token=" + token + "&action=getVille", null);
                JSONObject obj = new JSONObject(phraseJson);
                if (obj.getString("type").equals("erreur")) {
                    throw new EngineException(obj.getString("message"));
                } else {
                    JSONObject essai = obj.getJSONObject("contenu");
                    JSONArray array = essai.names();
                    for (int i = 0; i < array.length(); i++) {
                        JSONObject med = essai.getJSONObject(array.getString(i));
                        villes.add(new Ville(med.getLong("id"), med.getString("codePostal"), med.getString("ville")));
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
                throw new EngineException(e.getMessage());
            } catch (ClientProtocolException ex) {
                Logger.getLogger(Engine.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Engine.class.getName()).log(Level.SEVERE, null, ex);
            }
            return villes;
        }
     
        public static Engine getEngine() {
            if (engine == null) {
                engine = new Engine();
            }
            return engine;
        }
    Une classe Ville : j'ai fait le constructeur,setteur,getteur et toString (code postal et ville). Je ne mets pas ce code car je n'ai pas de problème avec cette classe.

    D'ailleurs,j'ai testé le code et la ville est bien affichée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static String ADR ;
    Log.v("ADR" , Engine.getEngine().getVille(new Ville(medComplet.getVille())).getVille());
    Mais pour le spinner dans un layout,ça n'affiche pas.
    Je pense que j'ai mal fait avec ArrayAdapter mais pas sûre. Ai-je loupé le code qu'il faut insérer?
    Merci d'avance pour votre aide.

  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
    Je vois bien la création de l'adapter... mais je ne vois pas l'appel à "setAdapter()" sur le spinner...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Points : 99
    Points
    99
    Par défaut
    Merci pour ta réponse

    Citation Envoyé par nicroman Voir le message
    Je vois bien la création de l'adapter... mais je ne vois pas l'appel à "setAdapter()" sur le spinner...
    J'ai ajouté l'appel et ça n'affiche toujours pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			ArrayAdapter<Ville> adapter = new ArrayAdapter<Ville>(this, android.R.layout.simple_spinner_item);
    			adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    			List<Ville> villes = Engine.getEngine().getVilles();
    			for(Ville v : villes){
    				adapter.add(v);
    			}
    			ville.setAdapter(adapter);

  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
    Maintenant remplaces TOUS les
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("Villes","setAdapterError",e);
    (changer le message "setAdapterError" en fonction du contexte, et "Villes" par le nom de la classe sans doute.

    Je subodore un NetworkOnMainThreadException....
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Ou peut-être que l'adapter ne s'est tout simplement pas mis à jour avec les nouvelles données.
    On écrivant ville.setAdapter(adapter); juste après le new ArrayAdapter
    Ou sinon on forcant la mise à jour adapter.notifyDataSetChanged() ?

  6. #6
    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
    Le notifyDatasetChanged n'est utile que si l'adapter est déjà lié à une (ou plusieurs) views...
    Tant que ce n'est pas le cas, je ne pense pas qu'il faille appeler la fonction.

    Mais bon, on peut essayer c'est certain.


    1. Tester avec un adapter rempli à la main: ca marche ? la liaison adapter/spinner est ok.
    2. Tester avec une liste de villes remplie à la main: ca marche ? la liaison array/adapter est ok.

    C'es pourquoi je me demande si la liste de villes est bonne ^^
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Membre régulier Avatar de Zalawy
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 137
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Maintenant remplaces TOUS les
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("Villes","setAdapterError",e);
    (changer le message "setAdapterError" en fonction du contexte, et "Villes" par le nom de la classe sans doute.
    Alors,j'ai testé en vain et je ne comprends pas. Du coup,j'ai modifié le code Spinner à EditText et ça marche!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private EditText ville;
    		ville = (EditText)findViewById(R.id.editVille);
     
    		String villeComplet = Engine.getEngine().getVille(new Ville(medComplet.getVille())).getCodePostal() + " "
    					+ Engine.getEngine().getVille(new Ville(medComplet.getVille())).getVille();
    		ville.setText(villeComplet);
    Finalement,je préfère prendre EditText que spinner car ça m'a cassé la tête
    Merci d'avoir pris le temps m'aider

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/06/2011, 23h36
  2. Réponses: 2
    Dernier message: 21/06/2006, 17h57
  3. Réponses: 20
    Dernier message: 23/03/2006, 16h21
  4. ORDER BY : spécifier les valeurs dans la requete
    Par maxo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/07/2005, 16h17
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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