2011-01-11 14 views
3

Ich habe ein JavaME-Programm geschrieben, das auf einen Webdienst zugreift, um Werte abzurufen, der Webdienst läuft auf einem Tomcat-Server.JavaME MIDlet löscht Variablen nicht?

Ich stehe vor einem sehr seltsamen Problem, wenn ich das Programm starte, lädt das Programm neue Werte wie ich erwartet, aber anstatt sie zu einem unitären Array hinzuzufügen, scheint es die vorherigen Array-Werte zu speichern und sie einfach hinzuzufügen. Vielleicht würde der Code es besser erklären.

ich zum ersten Mal ein String-Array erstellen, um die abgerufenen Werte und einen kleinen int-Wert speichern zu verwenden, wenn durch sie Looping, mache ich auch Speicher für die Dienste und Stubs:

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

Die midlet ruft dann ein Formular Wenn die startApp() -Methode ausgeführt wird und dies einen Wert in ein Textfeld eingeben und dann den Befehl send drücken kann, um den Wert an einen Server zu senden, sendet dieser Server ein Array von Werten zurück (18, um genau zu sein). Um dies zu implementieren, rufe ich dann die Methode commandAction() auf.

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(); 
     } 

Jetzt sollte das Programm herunterladen und 18 Werte in das String-Array und die Schleife durch sie legen. Es tut dies, aber es wird nicht die vorherigen Werte aus dem Array aus Gründen, die ich nicht ganz herausfinden kann.

Zum Beispiel, das erste Mal, als ich die Schleife ausgeführt hat, hat das Programm die 18 Werte wiederholt und gedruckt, beim zweiten Mal jedoch die ersten 18 Werte des vorherigen Laufs und dann die 18 heruntergeladenen Werte . Ich habe meine IDE geschlossen, meinen PC neu gestartet und Netbeans Cache-Ordner gelöscht, und aus irgendeinem Grund werden die Werte immer in dem Zeichenfolgenarray und dem Schleifenwert gespeichert, obwohl ich es beim Start des Programms auf 0 deklarierte.

Ich bin jetzt auf mein 15. Lauf des Programms und die Programmausgabe ist:

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

Kann mir jemand erklären, warum werden die Variablen nicht gelöscht werden?

+1

sehen Sie dieses Problem mit Blackberry oder vielleicht beim Testen mit dem Wireless Toolkit-Emulator? Wenn ja, dann kann dies eine bekannte Perversion sein, wenn JVM zwischen MIDlet-Starts weiterläuft, was bewirkt, dass statische Variablen die vorherigen Werte beibehalten, um den App-Entwickler zu überraschen. Ein Beispiel wird hier diskutiert: [statische Variablen behalten Werte vom vorherigen Start] (http://stackoverflow.com/questions/5258818/static-variables-keep-values-from-previous-launch/8148734#8148734) – gnat

Antwort

0

Das Problem scheint in GetDataService_Stub.getStock-Methode zu sein. Möglicherweise verwendet es die lokale Gerätepersistenz, um vorherige Serverdaten zu speichern. Bitte sehen Sie es sich an.