2011-01-11 8 views
3

J'ai écrit un programme JavaME qui accède à un service Web pour extraire des valeurs, le service Web s'exécute sur un serveur Tomcat. Je suis confronté à un problème très étrange, chaque fois que j'exécute le programme, le programme télécharge de nouvelles valeurs comme je l'avais prévu mais au lieu de les ajouter à un tableau unitialized, il semble stocker les valeurs précédentes et les ajouter. Peut-être que le code l'expliquerait mieux.JavaME MIDlet ne supprime pas les variables?

Je crée d'abord un tableau de chaînes pour stocker les valeurs récupérées et une petite valeur int à utiliser lors de la boucle à travers eux, je crée également le stockage pour les services et les talons:

public class StockQuery extends MIDlet implements CommandListener 
{ 
    String[] newResults = null; 
    int i = 0; 
    String stockSym = null; 
    getDataService service = null; 
    ..... 

Le midlet appelle ensuite un formulaire Lorsque la méthode startApp() s'exécute et que cela permet d'entrer une valeur dans une zone de texte, puis d'appuyer sur la commande send pour envoyer la valeur à un serveur, ce serveur renvoie un tableau de valeurs (18 pour être précis). Pour implémenter ceci, j'appelle ensuite la méthode commandAction().

public void commandAction(Command c, Displayable d) 
{ 
    else if(c == cmdSend) 
    { 
     stockSym = getSym.getString(); 
     service = new getDataService_Stub(); 
     try 
     { 
      newResults = service.getStock(stockSym); 
      for(i=0; i<newResults.length; i++) 
      { 
       System.out.println("Data " + i + " - " + newResults[i]); 
      } 
     } 
     catch (RemoteException ex) 
     { 
      ex.printStackTrace(); 
     } 

Maintenant, le programme devrait télécharger et placer 18 valeurs dans le tableau de chaînes et la boucle à travers eux. Il le fait mais il ne videra pas les valeurs précédentes du tableau pour des raisons que je ne peux pas tout à fait comprendre. Par exemple, la première fois que j'ai exécuté la boucle, le programme a fait une boucle et a imprimé les 18 valeurs, mais la deuxième fois, il a imprimé les 18 valeurs initiales de l'exécution précédente, puis les 18 autres valeurs qu'il venait de télécharger . J'ai fermé mon IDE, redémarré mon PC et supprimé le dossier cache Netbeans et pour une raison quelconque, il stockera toujours les valeurs dans le tableau de chaînes et la valeur de la boucle même si je l'ai déclaré à 0 à chaque démarrage du programme.

Je suis maintenant sur mon 15 exécution du programme et la sortie du programme est:

Data 267 - 34092040 
Data 268 - 22.73 - 31.58 
Data 269 - NasdaqNM 
Data 270 - 1.95 

Quelqu'un peut-il expliquer pourquoi les variables ne sont pas effacées?

+1

Voyez-vous ce problème avec Blackberry ou, peut-être en testant avec l'émulateur Wireless Toolkit? Si oui, cela peut être une perversion connue lorsque la JVM continue de fonctionner entre les lancements de MIDlet, causant la conservation des valeurs antérieures des variables statiques, à la surprise du développeur de l'application. Un exemple est discuté ici: [les variables statiques gardent les valeurs du lancement précédent] (http://stackoverflow.com/questions/5258818/static-variables-keep-values-from-previous-launch/8148734#8148734) – gnat

Répondre

0

Le problème semble être dans la méthode getDataService_Stub.getStock. Il peut s'agir de la persistance du périphérique local pour stocker les données du serveur précédent. S'il vous plaît jeter un coup d'oeil.