[J2ME] probleme de code réseau

probleme de code réseau [J2ME] - Java - Programmation

Marsh Posté le 13-02-2005 à 14:27:55    

Bonjour et merci de me lire :)
 
Je commence à apprendre J2ME depuis quelques jours pour un projet de cours. Je veux créer une application J2ME sur mon portable présentant un formulaire demandant les login/pass de l'utilisateur. L'application envoie ensuite ces infos à un programme PHP via GET qui affiche des informations si les login/pass sont corrects.
 
Voici mon code actuel :  
 

Code :
  1. import java.io.*;
  2. import javax.microedition.io.*;
  3. import javax.microedition.lcdui.*;
  4. import javax.microedition.midlet.*;
  5. public class maClasse extends MIDlet implements CommandListener {
  6.     private Display display;
  7. ///////// variables formulaire /////////
  8.     Form formulaire = null;
  9.     TextField login = null;
  10.     TextBox txtResults = null;
  11.     private Command cmdSubmit;
  12.     private Command cmdBack;
  13.     private Command cmdExit;
  14. //////////// fin ///////////////////////
  15.     String url = "http://127.0.0.1/test.php?login=monlogin&pass=monpass";
  16.     public maClasse() {
  17.        display = Display.getDisplay(this);
  18. ///////////////////////
  19.        cmdSubmit = new Command("Valider", Command.SCREEN, 1);
  20.        cmdBack = new Command("Retour", Command.BACK, 0);
  21.        cmdExit = new Command("Quitter", Command.EXIT, 1);
  22. ///////////////////////
  23.     }
  24.     public void startApp() {
  25. //////////////////////
  26.       formulaire = new Form("monsite : test" );
  27.      
  28.       login = new TextField("Entrez votre login :", null, 50, TextField.ANY);
  29.       formulaire.append(login);
  30.       formulaire.addCommand(cmdSubmit);
  31.       formulaire.addCommand(cmdExit);
  32.       formulaire.setCommandListener(this);
  33.       display.setCurrent(formulaire);
  34. /////////////////////
  35.     }
  36.     public void pauseApp() {}
  37.     public void destroyApp(boolean unconditional) {}
  38.     void connectURL(String url) throws IOException {
  39.         HttpConnection connection = null;
  40.         InputStream is = null;
  41.         OutputStream os = null;
  42.         StringBuffer stringBuffer = new StringBuffer();
  43.         TextBox textBox = null;
  44.         try {
  45.           connection = (HttpConnection) Connector.open(url);
  46.           connection.setRequestMethod(HttpConnection.GET);
  47.           connection.setRequestProperty("IF-Modified-Since","20 Jan 2001 16:19:14 GMT" );
  48.           connection.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.0" );
  49.           connection.setRequestProperty("Content-Language", "en-EN" );
  50.           connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded" );
  51.           os = connection.openOutputStream();
  52.           is = connection.openDataInputStream();
  53.           int ch;
  54.           while ((ch = is.read()) != -1) {
  55.             stringBuffer.append((char) ch);
  56.           }
  57.           textBox = new TextBox("Connexion...", stringBuffer.toString(), 1024, 0);
  58.         }
  59.         finally {
  60.           if(is!= null) {
  61.              is.close();
  62.           }
  63.           if(os != null) {
  64.              os.close();
  65.           }
  66.           if(connection != null) {
  67.              connection.close();
  68.           }
  69.         }
  70.         display.setCurrent(textBox);
  71.     }
  72.     public void commandAction(Command c, Displayable d)  {
  73.       String str = c.getLabel();
  74.       if (str.equals("Quitter" )) {
  75.          destroyApp(true);
  76.          return;
  77.       }
  78.       else if (str.equals("Retour" )) {
  79.          display.setCurrent(formulaire);
  80.          return;
  81.       }
  82. //////////// appel de connectURL ////////
  83.       try {
  84.         connectURL(url);
  85.       }
  86.       catch (IOException e) {
  87.         System.out.println("IOException " + e);
  88.         e.printStackTrace();
  89.       }
  90. ////////////////////////////////////////
  91.     }
  92. }


 
Maintenant, voilà mon problème. Lorsque j'essaie de me connecter avec ce code sans mettre de formulaire, ça marche bien. Lorsque je crée un formulaire sans la connexion, ça marche bien. Mais si j'utilise le formulaire pour me connecter, le mobile reste bloqué sur la demande de confirmation de connexion réseau.
 
Je précise que je teste actuellement sur PC via le JWT de Sun.

Reply

Marsh Posté le 13-02-2005 à 14:27:55   

Reply

Marsh Posté le 13-02-2005 à 14:30:10    

Le HTTP en J2ME, c'est qualeque chose (vire ton content-type)


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 13-02-2005 à 14:47:25    

euh...je ne vois pas de changement. Je reste bloqué sur ce magnifique :
 
http://jcom.apinc.org/arg.png

Reply

Marsh Posté le 13-02-2005 à 14:49:07    

Ahhhh, et bien répond yes [:spamafote]
 
http://rincevent.dyndns.org/toto/Airtime.png


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 13-02-2005 à 14:56:46    

bah ouais j'y avais pensé :/
mais j'ai beau le lui dire, il veut rien savoir. Il reste sur cet écran, et ne passe pas sur celui qui affiche les infos recueillies (textBox)
 
C'est sûrement une erreur stupide, mais je trouve pas.


Message édité par fade le 13-02-2005 à 14:58:35
Reply

Marsh Posté le 13-02-2005 à 15:08:02    

Etonnant, c'est le getConnection qui reste en attente...  
 
Tu peux désactiver les comman des de la midlet avant de faire la connection ?


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 13-02-2005 à 15:25:59    

Elianor a écrit :

Etonnant, c'est le getConnection qui reste en attente...  
 
Tu peux désactiver les comman des de la midlet avant de faire la connection ?


 
ça je sais pas faire, désolé je débute, mais je veux bien essayer si tu m'explique rapidement.

Reply

Marsh Posté le 13-02-2005 à 15:29:15    

removeCommand ?


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 13-02-2005 à 15:39:47    

ok, j'ai modifié ça :
 

Code :
  1. public void commandAction(Command c, Displayable d)  {
  2.       String str = c.getLabel();
  3.       if (str.equals("Quitter" )) {
  4.          destroyApp(true);
  5.          return;
  6.       }
  7.       else if (str.equals("Retour" )) {
  8.          display.setCurrent(formulaire);
  9.          return;
  10.       }
  11.       formulaire.removeCommand(cmdSubmit); // <-
  12.       formulaire.removeCommand(cmdExit); // <-
  13.       formulaire.removeCommand(cmdBack); // <-
  14.       try {
  15.         connectURL(url);
  16.       }
  17.       catch (IOException e) {
  18.         System.out.println("IOException " + e);
  19.         e.printStackTrace();
  20.       }
  21.     }


 
mais ça ne donne rien.
 
Sinon, j'avais et j'ai toujours un warning mais je ne pense pas que ce soit important :
 

Code :
  1. Warning: To avoid potential deadlock, operations that may block, such as
  2. networking, should be performed in a different thread than the
  3. commandAction() handler.

Reply

Marsh Posté le 13-02-2005 à 15:41:57    

non, j'avais aussi ce warning sur mon appli, et ça ne l'empêchait pas de marcher.


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Marsh Posté le 13-02-2005 à 15:41:57   

Reply

Marsh Posté le 13-02-2005 à 15:50:42    

bah te casse pas la tête, je vais continuer à écumer tous les sites j2me de google et comparer les codes sources avec le mien pour essayer de trouver le probleme. Je reposte ici si j'avance.

Reply

Marsh Posté le 20-09-2005 à 12:12:03    

Je crois qu'il ne faut pas mettre cette partie dans le CommandAction.
Il me semble qu'il faut creer un thread, et le placer dedant...
 
 

Citation :

# //////////// appel de connectURL ////////
#       try {
#         connectURL(url);
#       }
#       catch (IOException e) {
#         System.out.println("IOException " + e);
#         e.printStackTrace();
#       }

Reply

Marsh Posté le 20-09-2005 à 12:32:11    

Zogzog4 a écrit :

Je crois qu'il ne faut pas mettre cette partie dans le CommandAction.
Il me semble qu'il faut creer un thread, et le placer dedant...


 
(joli remontage de tomic)
 
je confirme :o


---------------
JE JE SUIS LIBERTINEEEEEEEEEEE JE SUIS UNE CATINNNNNNNNN §§§§§§§§
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed