Jump to content
Nokioteca Forum

Problemi Connessioni Alla Servlet Da Smartphone


MokaStar
 Share

Recommended Posts

Ciao, ho un problema nell'esecuzione della mia applicazione realizzata con J2ME sul Nokia N95 (Symbian).

In poche parole, se eseguo l'applicazione con il simulatore di Java me SDK 3.0 tuttu funziona, ovvero:

dopo l'inserimento di username e password, viene effettuata la connessione alla servlet per la verifica del login e si apre il form successivo(login OK).

Se eseguo l'applicazione sul cellulare, dopo l'inserimento di username e password, dopo qualche secondo d'attesa compare il messaggio: ECCEZIONE NON GESTITA, CHIUDERE L'APPLICAZIONE (SI/NO).

Come mai accade questo? Bisogna apportare modifiche al codice quando si fa girare il tutto sul cellulare?

Ecco il codice:

private void connect(String usr, String pwd) {

HttpConnection hc = null;

InputStream in = null;

OutputStream os = null;

StringBuffer buffer = new StringBuffer();

try

{

hc = (HttpConnection)Connector.open(url);

hc.setRequestMethod(HttpConnection.POST);

hc.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");

hc.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.1");

hc.setRequestProperty("Content-Language", "en-CA");

hc.getRequestProperty(url);

hc.getResponseCode();

os = hc.openOutputStream();

//start

os.write('1');

os.write('§');

os.flush();

byte postmsg[] = usr.getBytes();

for(int i=0;i<postmsg.length;i++) {

os.write(postmsg);

}

os.write('§');

os.flush();

byte postmsg2[] = pwd.getBytes();

for(int i=0;i<postmsg2.length;i++) {

os.write(postmsg2);

}

os.flush();

//end

in = hc.openInputStream();

int contentLength = (int)hc.getLength();

byte[] raw = new byte[contentLength];

int length = in.read(raw);

os.close();

in.close();

hc.close();

// Show the response to the user.

String s = new String(raw, 0, length);

mMessageItem.setText(s);

if(s.charAt(0)=='O' && s.charAt(1)=='K')

mDisplay.setCurrent(frm2);

else

mDisplay.setCurrent(mMainForm);

}

catch (IOException ioe) {

mMessageItem.setText(ioe.toString());

mDisplay.setCurrent(mMainForm);

}

}

---------------------

dove:

private String url = "http://www.miosito.it/midp/miosito";

---------------------

Qualcuno può aiutarmi??

Vi ringrazio.

Link to comment
Condividi su altri siti

Aggiungo che nella finestra di "Output - MyApplication (run)" di javame sdk dopo l'esecuzione ci sono i seguenti messaggi:

Starting emulator in execution mode

Installing suite from: http://127.0.0.1:xxxx/MyApplication.jad

Uncaught exception: java.lang.StringIndexOutOfBoundsException

- java.lang.String.charAt(), bci=16

- MyMidlet.connect2(), bci=310

- MyMidlet.access$1500(), bci=6

- MyMidlet.run(), bci=32

Credo sia questa l'eccezione non gestita dal cellulare....ma come mai?

Qualcuno può aiutarmi ??? Grazie ancora.

Link to comment
Condividi su altri siti

L'errore e' abbastanza esplicativo...

Starting emulator in execution mode
Installing suite from: http://127.0.0.1:xxxx/MyApplication.jad
Uncaught exception: java.lang.StringIndexOutOfBoundsException
- java.lang.String.charAt(), bci=16
- MyMidlet.connect2(), bci=310
- MyMidlet.access$1500(), bci=6
- MyMidlet.run(), bci=32

Richiamando il metodo charAt() hai specificato un indice che sfora la dimensione dell'array...

P.S.

se lo scopo di quel colore azzurrino e' rendere difficoltosa la lettura, per evitare di ricevere aiuto, sei sulla buona strada per riuscirci! :)

Magari prova con il colore bianco la prossima volta, e' ancora piu' difficile da leggere!

Modificato da Il.Socio
Link to comment
Condividi su altri siti

L'errore e' abbastanza esplicativo...

Starting emulator in execution mode
Installing suite from: http://127.0.0.1:xxxx/MyApplication.jad
Uncaught exception: java.lang.StringIndexOutOfBoundsException
- java.lang.String.charAt(), bci=16
- MyMidlet.connect2(), bci=310
- MyMidlet.access$1500(), bci=6
- MyMidlet.run(), bci=32

Richiamando il metodo charAt() hai specificato un indice che sfora la dimensione dell'array...

P.S.

se lo scopo di quel colore azzurrino e' rendere difficoltosa la lettura, per evitare di ricevere aiuto, sei sulla buona strada per riuscirci! :)

Magari prova con il colore bianco la prossima volta, e' ancora piu' difficile da leggere!

Ciao, grazie per avermi risposto. Purtroppo sono alle prime armi, potresti modificare la definizione dell'indice del mio codice? Ho fatto delle prove, ma sicuramente non ho modificato correttamente. Grazie ancora!

Link to comment
Condividi su altri siti

Purtroppo sono alle prime armi, potresti modificare la definizione dell'indice del mio codice?

Mi spiace, ma servire la "pappa pronta" non e' il genere di aiuti che io fornisco...

Dovrai mettere mano tu al tuo codice. :)

Ho fatto delle prove, ma sicuramente non ho modificato correttamente. Grazie ancora!

Hai capito la natura dell'errore?

Quali prove hai fatto?

Modificato da Il.Socio
Link to comment
Condividi su altri siti

Mi spiace, ma servire la "pappa pronta" non e' il genere di aiuti che io fornisco...

Dovrai mettere mano tu al tuo codice. :)

Hai capito la natura dell'errore?

Quali prove hai fatto?

Allora, ho definito un indice che supera le dimensioni dell'array (questo è l'errore).

Quindi mi sono concentrata su questa sezione di codice per le modifiche :mumble:

// Show the response to the user.

String s = new String(raw, 0, length);

mMessageItem.setText(s);

if(s.charAt(0)=='O' && s.charAt(s.length()-1)=='K')

mDisplay.setCurrent(frm2);

else

mDisplay.setCurrent(mMainForm);

}

catch (IOException ioe) {

mMessageItem.setText(ioe.toString());

mDisplay.setCurrent(mMainForm);

}

}

Adesso non esce l'errore nella finestra dell'output dell'sdk...ma accanto al pulsante "connetti" della mia applicazione esce una stringa: OK.

Ma non mi permette di visualizzare il form successivo...

Qualcosa è cambiato...ma non credo di aver raggiunto la soluzione...

La stringa "OK" è ottenuta dal seguente controllo in Servlet.java :

boolean ok=checkUser(usr,pwd);

if(ok)

out.println("OK");

else

out.println("nome utente "+usr+" password "+pwd+" errati");

conn.close();

Perchè non procede con il form successivo? definito:

mDisplay.setCurrent(frm2);

Grazie ancora..

Modificato da MokaStar
Link to comment
Condividi su altri siti

Perchè non procede con il form successivo? definito:

mDisplay.setCurrent(frm2);

Vedendo il codice, direi che non procede perche' almeno una di queste condizioni e' falsa...

s.charAt(0)=='O'

s.charAt(s.length()-1)=='K'

quindi viene eseguito il ramo "else" del controllo...

mDisplay.setCurrent(mMainForm);

Modificato da Il.Socio
Link to comment
Condividi su altri siti

Vedendo il codice, direi che non procede perche' almeno una di queste condizioni e' falsa...

s.charAt(0)=='O'

s.charAt(s.length()-1)=='K'

quindi viene eseguito il ramo "else" del controllo...

mDisplay.setCurrent(mMainForm);

Ora funziona soltanto con l'emulatore di java sdk, ma non funziona sull'N95....quando prova a connettersi dice: "eccezione non gestita"...

perchè funziona sul pc e sul cell no? questa cosa non la capisco... :wacko:

Link to comment
Condividi su altri siti

Ora funziona soltanto con l'emulatore di java sdk, ma non funziona sull'N95....quando prova a connettersi dice: "eccezione non gestita"...

perchè funziona sul pc e sul cell no? questa cosa non la capisco... :wacko:

Finalmente ho raggiunto la soluzione...dopo ben 4 giorni :lmaosmiley:

Posto il codice:

if(s.charAt(0)=='O' && s.charAt(postmsg.length)=='K')
       mDisplay.setCurrent(mMainForm);
     else
       mDisplay.setCurrent(frm2);

Finalmente funziona la connessione e il login utente, con succesiva apertura del secondo form.

Grazie per i suggerimenti :thumbs::lmaosmiley:

Per ora vado avanti con l'applicazione....

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy