minisac Posté(e) 20 janvier 2011 Share Posté(e) 20 janvier 2011 (modifié) Bonsoir, Je viens poster mon sujet ici car je n'ai trouvé aucune réponse sur google... Commençons d'abord par une brève présentation: Je m'appelle Benjamin, 20 ans et je suis étudiant en deuxième année d'informatique. (Pour faire bref c'est bref :/) Je participe actuellement à un projet qui est le suivant: en gros, une application qui permet de faire des recherches de recettes de cuisine, avec une adaptation de la demande par intelligence artificielle via une communication avec un serveur etc.. Ce projet a déjà été développé par des docteurs dans le domaine de l'informatique (non non, pas par moi :) ). Le projet est écrit à l'aide de fichiers java , de servlets .. (au passage je fais de la pub si vous voulez voir vraiment à quoi ça ressemble: http://intoweb.loria.fr/taaable3ccc/ , car je vous imagine bien devant votre ordinateur à vous gratter la tête, perdus dans l'incompréhension la plus totale à cause de moi :/ ). Notre "mission", à nous dans ce projet? Justement, j'y viens: Créer une interface compatible avec Android, et lorsque l'utilisateur rentre sa recherche, aller interroger le serveur pour aller récupérer une réponse. (Comme sur le site ou quand vous tapez par exemple "apple" il vous sort toutes les recettes à base de pomme). J'ai acheté un livre pour la programmation Android, et j'ai lu quelques sujets il y a maintenant 5 jours. J'ai fini la programmation de l'interface graphique et arrive à récupérer la requête de l'utilisateur dans un String. Le problème c'est que je me demande comment faire maintenant, pour aller interroger le serveur avec.... Ma responsable de projet tuteuré m'a dit qu'il fallait créer un serveur Tomcat qui permettrait de contenir l'application déjà existante. Il suffirait après de mettre en oeuvre à l'aide de classes déjà existantes (avec le protocole HTTP) pour aller interroger le serveur à l'aide du String récapitulant la demande, et récupérer une réponse. Soit :o cette réponse m'a beaucoup aidé (si si j'vous jure). Le problème c'est que à partir du projet déjà existant (donc le projet qui existait déjà avant le développement de l'interface compatible Android), j'arrive à l'exécuter avec le plugin Tomcat (j'utilise l'IDE Eclipse) pour arriver sur la page dont je vous ai donné le lien. Mais comment coupler les deux? (à savoir ce qui existe déjà avec ce que j'ai écrit moi). Me servir des classes permettant l'échange entre application/serveur ça ne me pose pas de problème. Mais Tomcat et tout ça pour moi sont encore des noms grossier n'évoquant rien de bien dans mes pensées :/. Comment faire? Créer un serveur et déposer toute l'application qui existait déjà dessus? C'est plus à ce niveau là que je suis bloqué! Si quelqu'un arrive à comprendre ce que j'ai voulu expliqué, arrive à comprendre le problème, et aurait une solution, je le félicite tout d'abord :)) Si au passage il peut m'expliquer, alors là! Ben là je sais pas j'en perds mes mots :) Merci d'avance et bonne fin de soirée, ou plutôt (1h00..) bonne nuit! Minisac! Modifié 20 janvier 2011 par minisac Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
RodolpheBeaufort Posté(e) 20 janvier 2011 Share Posté(e) 20 janvier 2011 (modifié) Salut, En gros voici les étapes que tu dois suivre : 1 - Installe un serveur tomcat. Rien de compliqué... (cf http://www.objis.com/formation-java/tutoriel-tomcat-installation-tomcat-6.html) 2 - Exporte l'application depuis ton IDE Eclipse sous la forme d'une archive .war (cf. http://www.java-tips.org/other-api-tips/eclipse/how-to-make-war-file-in-eclipse.html) 3 - Copie ton archive .war dans le sous-répertoire webapps de ton installation Tomcat (Tomcat décompresse et installera alors automatiquement ton appli...) Voila, j'espère que c'est plus clair pour toi ... Cdlt, Rodolphe Modifié 20 janvier 2011 par rib64 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Naskel Posté(e) 20 janvier 2011 Share Posté(e) 20 janvier 2011 Si ton serveur est en local (les urls contiennent localhost) pense à mettre ton tomcat sur ton Android. Une appli existe pour ca !!! Pour l'échange de message entre le serveur et ton application. Pense à utiliser du Json ou Rest. Cordialement Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 20 janvier 2011 Auteur Share Posté(e) 20 janvier 2011 2 - Exporte l'application depuis ton IDE Eclipse sous la forme d'une archive .war (cf. http://www.java-tips...in-eclipse.html) Quand tu dis application, c'est seulement le projet Android qui s'occupe de gérer l'interface, ou aussi le projet à côté ? Effectivement j'y vois déjà plus clair, merci à vous deux pour ces réponses rapides! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
RodolpheBeaufort Posté(e) 20 janvier 2011 Share Posté(e) 20 janvier 2011 Salut, Si je comprend bien l'architecture applicative que tu as décrite ci-dessus, tu as d'un côté une application web 'existante' à déployer sur un serveur tomcat et de l'autre une application Android 'cliente' que tu as développée. Les deux applications communiquent via un protocole http (par exemple REST/JSON ou REST/POX comme suggéré par Naskel). C'est donc l'application web 'existante' que tu dois exporter sous forme d'une archive war pour être déployée sur le serveur tomcat afin que ton application cliente puisse lui envoyer des requêtes http. Cdlt, Rodolphe. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 20 janvier 2011 Auteur Share Posté(e) 20 janvier 2011 On ne peut pas faire plus rapide, plus clair et précis. Merci beaucoup à tous, vous m'avez apporté une précieuse aide. Bonne nuit! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 23 janvier 2011 Auteur Share Posté(e) 23 janvier 2011 Bonsoir, J'ai installé tomcat, installé les servlets à déposer etc. Si je tape dans mon navigateur l'adresse URL qu'il faut, ma page web affiche "RESULTATS"+ les résultats voulus en XML . Jusqu'ici parfait, je couple le serveur tomcat avec mon application, je me connecte avec une WebView à cette URL, le chargement s'effectue, mais rien ne s'affiche mis à part "RESULTATS". J'ai l'impression qu'il ne veut pas afficher le XML, alors que depuis google chrome ou mozilla ça s'affiche tout à fait correctement. Quelqu'un aurait il une réponse à ce problème? Merci d'avance, Minisac Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Naskel Posté(e) 25 janvier 2011 Share Posté(e) 25 janvier 2011 Bonjour, J'ai une petite idée. Quand tu démarre une WebView, il faut savoir que tous ses settings sont à false c'est à dire que les plugins du navigateur ne sont pas activés et que le javascript n'ont plus. Je suppose que ton navigateur à besoin d'activer un plugin pour pouvoir lire le XML (Attention ce n'est qu'une supposition je ne suis pas sur). Essaye en ajoutant ce code à ta WebView : WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setPluginsEnabled(true); Si cela ne fonctionne pas, essaye avec un autre navigateur ou vérifie que la taille du flux XML renvoyé n'est pas trop gros . Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 25 janvier 2011 Auteur Share Posté(e) 25 janvier 2011 (modifié) Très bien, je vais essayé, de toute façon c'est provisoire car il va falloir après traduire le XML en HTML, et c'est le serveur qui s'en occupera, donc la question ne se posera plus, non? Sinon, j'ai un autre petit problème. Les url's qui peuvent être affichées dans la webview comportent des liens. J'ai réussi à trouver le moyen de rester dedans si l'on clique dessus (plutôt que de fermer l'application et d'ouvrir le navigateur livré avec l'OS). Cependant, j'aimerais bien que l'utilisateur puisse (comme sur un navigateur) aller sur les pages précédentes si jamais il veut y retourner (faire un équivalent du bouton précédent quoi). Sur internet, j'ai trouvé cette fonction à plusieurs reprises: public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } Le problème c'est que dans cette fonction "webview" n'est pas définit. Quel code dois-je écrire pour arriver à produire l'effet voulu? Merci d'avance. Modifié 26 janvier 2011 par minisac Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 26 janvier 2011 Auteur Share Posté(e) 26 janvier 2011 Personne? :emo_im_angel: Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 26 janvier 2011 Share Posté(e) 26 janvier 2011 Déclare ton vebview en variable globale et puis c'est tout. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 28 janvier 2011 Auteur Share Posté(e) 28 janvier 2011 Le problème c'est que j'ai plusieurs layout. Et quand au début du programme je tape WebView wv=(WebView)findViewById(R.id.webview1); et qu'ensuite j'exécute le programme, il ne marche pas.. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Naskel Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 Bonjour, Pourrais tu être un peu plus précis c'est à dire : - Montre nous un peu de code (dans quel méthode par exemple) - Y-a t il des logs dans logcat? Cordialement, Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 Oui par ce que wv est une variable uniquement visible dans ta méthode. Change ta déclaration de variable pour qu'elle soit visible dans toute ta classe. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 28 janvier 2011 Auteur Share Posté(e) 28 janvier 2011 Ben le problème c'est que j'ai 4 webviews différentes (pour des histoire de différentes langues). Donc en fait dans la fonction onKeyDown, ça ne marche pas car il ne sait pas à quelle WebView l'appliquer :/ en gros on a : public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } mais il faudrait savoir si webview= webview1 ou webview2 ou webview3 ou webview 4 :/ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 28 janvier 2011 Share Posté(e) 28 janvier 2011 (modifié) y'a un truc que je comprend pas tu affiches les 4 webview en même temps à l'écran ? Si oui comment choisi-tu (fonctionnellement parlant) celui que ou tu veux faire revenir en arrière ? Si tu n'en a q'un d'afficher d'abord pourquoi en as-tu 4 si un seul est affiché, ensuite tu sais lequel est affiché donc tu peux exécuter ta méthode dessus. Modifié 28 janvier 2011 par moritan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 28 janvier 2011 Auteur Share Posté(e) 28 janvier 2011 En fait j'ai 4 webviews décrites dans 4 layouts différents en XML (suivant le langage que l'utilisateur aura choisi au lancement du programme). Et dans le fichier .java j'ai par exemple: Fr () { WebView wv=(WebView) findViewById(R.Id.webview1); wv.loadUrl("....");} En() { WebView wv=(WebView) findViewById(R.Id.webview2); wv.loadUrl("....");} etc... Je suis obligé de faire des layouts différents, car pour chaque layout où se trouve une webview, je mets un bouton qui lorsque l'on clique dessus permet à l'utilisateur de retourner dans le programme principal au langage correspondant: exemple pour webview1.xml <..Layout...... > <Button ... android:onClick= retournerAuMenuFr; /> ... </layout> webview2.xml <..Layout...... > <Button ... android:onClick= retournerAuMenuEn; /> ... </layout> Vous voyez ce que je veux dire??? Donc du coup j'ai 4 WebView's. Une seule peut être affichée à la fois. Le problème c'est de savoir laquelle dans la fonction onKeyDown(...). Car cette fonction est implémentée de la manière suivante: public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } Ce qu'il faudrait que je fasse, c'est faire comprendre au programme exécutant cette fonction de quelle WebView il s'agit (est-ce que la webview dont on se sert au moment présent est webview1, 2, 3 ou 4??) Vous voyez ce que je veux dire? Désolé de ne pas pouvoir être plus précis mais je n'ai pas le code sur moi. Je pourrai vous en faire une copie demain, ou même vous l'envoyer par mail pour ceux qui veulent. Si en attendant certains ont compris et ont une réponse.. Merci d'avance et bonne fin de soirée/bonne nuit, minisac! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 29 janvier 2011 Share Posté(e) 29 janvier 2011 houla tu fonces dans un mur. Bon faut faire bcp plus simple, 1 seul webview. la langue dois être une propriété et pas un élément de l'ihm. Pour gérer la langue tu as tout ce qu'il faut ailleurs mais surtout ne duplique par ton ihm par langue c'est une grosse connerie. http://developer.android.com/guide/topics/resources/localization.html Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 30 janvier 2011 Auteur Share Posté(e) 30 janvier 2011 Merci beaucoup pour tes conseils, c'est bon j'ai plus qu'une webviexw et ça marche. J'ai donc cette fonction: public boolean onKeyDown(int keyCode, KeyEvent event) { webview=(WebView)findViewById(R.id.WebView4); if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } Le seul truc qui bug maintenant c'est que quand je quitte ma webview pour revenir dans le programme et que j'appuie sur la touche KEYCODE_BACK ça fait planter l'application.. Des idées? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 1 février 2011 Auteur Share Posté(e) 1 février 2011 Personne? Merci d'avance (et merci pour tout déjà :) ) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moritan Posté(e) 1 février 2011 Share Posté(e) 1 février 2011 t'as pas une pile d'erreur ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 2 février 2011 Auteur Share Posté(e) 2 février 2011 Alors comme fonction dans mon code, j'ai exactement ceci: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { webview=(WebView)findViewById(R.id.WebView4); if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } Pour ce qui est de l'exécution, le programme crash quand j'appuis sur le bouton KEYCODE_BACK alors que j'ai quitté ma webview (le bouton devrait alors être utilisé pour quitter l'application). Le message d'erreur est le suivant: "the application (app.src) has stopped unexpectedly, please try again." Et je n'ai d'autres choix que d'appuyer sur "Force close" :/ Par contre aucun message d'erreur dans la console de l'environnement de développement. Cependant avant l'implémentation de cette fonction je n'avais pas ce problème. Si vous voulez d'autres bouts de code, faites le moi savoir ! :) Merci d'avance, minisac! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 2 février 2011 Auteur Share Posté(e) 2 février 2011 Personnellement je pense que c'est cette ligne qui bug: webview=(WebView)findViewById(R.id.WebView4); Car quand l'application rentre dans la fonction alors que je ne suis plus connecté à internet (et donc que je n'utilise plus ma webview et que je suis passé à un autre layout), il ne trouve plus la WebView4. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 2 février 2011 Auteur Share Posté(e) 2 février 2011 ....Et c'était bien cela le problème, c'était logique en plus. Merci, et bonne soirée, Minisac! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
minisac Posté(e) 2 février 2011 Auteur Share Posté(e) 2 février 2011 J'ai parlé trop vite... Ca marche si la webview à été utilisée. Mais maintenant lorsque je démarre l'application et que j'appuie sur le bouton retour, si la webview n'a pas encore utilisée le programme plante (comme si il n'arrivait pas à savoir si la webview.canGoBack() retourne true). Je comprends plus grand chose donc si quelqu'un a une idée en tête! Merci d'avance et bonne fin de soirée, minisac. 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.