laurent31 Posté(e) 8 octobre 2009 Share Posté(e) 8 octobre 2009 Bonjour Dans le cadre d'un projet de recherche, nous développons une application distribuée qui doit tourner sur PC mobile et smartphones windows mobile et android (google phone). En deux mots, il s'agit d'une application qui propose différents types de services à des usagers: donc modèle client/serveur avec des menus de choix pour le client. Cette application est développée en java: J2ME sous windows mobile , SDK DoNut sous Android. Les problèmes que nous rencontrons se situent sous Android pour récupérer le choix du client sur une liste. Une activité principale (côté client) dialogue automatiquement avec le serveur, puis lance une interface (listView) qui a pour but d'afficher une liste d'items parmi lesquels le client pourra préciser son choix Donc : - mise en place d'un setOnItemClickListener - utilisation de onItemClick pour récupérer la valeur sélectionnée par le client. - Une méthode publique FaireChoix() permet de récupérer ce choix localement via un onItemClick : tout se passe comme si on restait indéfiniment dans le "onItemClick", alors que le choix a été renseigné mais le reste du programme ne voit pas ce choix. - Il doit manquer l'équivalent d'un exit, mais pour l'instant nous n'avons rien trouvé dans la doc (android user manual). Une idée de piste ? merci d'avance pour vos propositions. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomas.l Posté(e) 8 octobre 2009 Share Posté(e) 8 octobre 2009 - utilisation de onItemClick pour récupérer la valeur sélectionnée par le client. Salut, Cette phrase m'étonne un peu, j'ai l'impression que vous appelez vous-même la méthode onItemClick. As tu un exemple de code ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
laurent31 Posté(e) 8 octobre 2009 Auteur Share Posté(e) 8 octobre 2009 Bonjour, J'ai avancé depuis mon post. Maintenant j'envoie mon choix au serveur mais je ne "sors" toujours pas de mon OnItemClick(). Le booleen "Terminer" est toujours à faux (initialisation effectuée en global au début), ce qui m'empêche de continuer mon dialogue. Code Dialogue côté client : // Traitement du choix FaireChoix(nbsession); // Construction d'une liste de session(s) + affichage de celle-ci a l'ecran + envoi choix if (terminer == true) { // Utilisation session (OUI/NON) RecevoirDemandeOutil(); // verif si outil chat.jar present TrouverOutil(nomclient); // verifier presence outil + envoi reponse serveur RecevoirAutorisation(); // recevoir accord utilisation session ou non } Code SetOnItemClick() : méthode public FaireChoix(nbre) public void FaireChoix(int nbre) { ArrayList Sessions = new ArrayList(); for (int i = 0; i < nbre; i++) { Session enregistrement = new Session(0, " ", " "); enregistrement = (Session) session.elementAt(i); Sessions.add(enregistrement.getIdSession() + " " + enregistrement.getTheme()); } setContentView(R.layout.choix); liste = (ListView) findViewById(R.id.Liste); final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, Sessions); liste.setAdapter(adapter); liste.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { choix = liste.getSelectedItem().toString(); // recupere le choix de l'utilisateur System.out.println("Le choix selectionne : " + choix); // s'affiche bien sur la log Androîd (outil Catlog) ps = new PrintStream(sortie); ps.println(getNomClient() + " : Here my choice !"); ps.println(" " + choix); ps.println("X"); terminer = true; // mise à vrai du booleen terminer - permet de continuer le dialogue } }); } Code dialogue côté serveur : String message5 = RecevoirChoix(); // Recevoir le choix selectionne (une session) par le client - OK System.out.println(message5); // Affiche le message du client (Voici mon choix) - OK // Traitement de la connexion a la session choisie VerifierChoix(Liste); // fonctionne jusqu'au bout (envoi demande outil) Une fois le choix reçu par le serveur celui-ci exécute la méthode publique "VerifierChoix(Liste)", ce qui se passe correctement. Par contre dans cette méthode, le serveur demande au client si celui-ci possède un outil particulier. L'envoi du message se fait correctement. PB : la réception côté client ne se fait pas car "terminer" est toujours à FAUX alors que normalement il devrait être à VRAI. Une remarque supplémentaire : si je ne met pas la condition "if (terminer = true) ....", l'affichage de ma "ListView" ne se fait pas ? En gros, j'ai toujours le même problème sauf que ce n'est plus avec le choix. J'espère que j'ai été clair dans les explications car comme tu t'en doutes je suis novice. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 8 octobre 2009 Share Posté(e) 8 octobre 2009 ton terminer pour le propager tu as soit du le déclarer final ...soit static au début de ta classe ? en final il ne peut pas être modifié (mais là ça compilerai pas ou exploserait) en static c'est ok mais comme tout est dans un grosse boucle je suppose que c'est pas top. Tu devrais faire ton choix dans un thread séparé (mais c'est bien chiant vu que le thread doit rappeler un autre thread pour agir sur l'UI.....) en gros creer thread choix creer thread ui liste+tout le truc terminer =true fin thread ui fin thread choix lancer le thread choix boucle choix si terminer faire truc et sortir fin boucle choix MAIS tout ça est bien pourri en fait.... un choix dans la philosophie android c'est: lancement activity du choix et onResult pour le retour du choix..... et hop plié en 3 lignes de codes Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
thomas.l Posté(e) 8 octobre 2009 Share Posté(e) 8 octobre 2009 Oui, ton code semble assez séquentiel là où l'évènementiel est surement plus simple. J'avoue que je ne comprends pas bien ce que c'est sensé faire. ton if(terminer) m'étonne, c'est pas plutôt un wait() ou un join() que tu voulais faire ? Mais dans ces cas là tu vas pourrir ton thread. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.