Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    J2ME - problema thread con http request

    Ciao a tutti, premetto che sono al mio primo post.
    Vi spiego subito il problema: ho realizzato un'applicazione j2me che effettua una chiamata http GET ad una pagina php che riceve i dati passati come parametri, li elabora e invia la risposta. Tutto funzionava bene sia con l'emulatore sia sul telefonino. Quindi un secondo passo è stato creare un nuovo thread che effettui la connessione così da evitare blocchi del programma e qui sono sorti i miei problemi... L'applicazione funziona perfettamente con l'emulatore ma una volta installata sul telefonino effettua correttamente la conessione ma la effettua solo una volta. Cioè se tento di effettuare una seconda connessione (ovviamente senza chiudere l'applicazione) non funziona. Ho provato diverse soluzioni come ad esempio effettuare una richiesta POST ma senza risolvere il problema. Vi posto le parti di codice interessate:

    questa è la classe che effettua la connessione:
    codice:
    public class HttpGet extends Thread {
        public void run(){
            HttpConnection      hcon = null;
            DataInputStream     dis = null;
            StringBuffer        responseMessage = new StringBuffer();
            
            try {
                hcon = ( HttpConnection )Connector.open( url );
                dis = new DataInputStream( hcon.openInputStream() );
                
                int ch;
                while ( ( ch = dis.read() ) != -1 ) {
                    responseMessage.append( (char) ch );
                }
            }         
            catch( Exception e )
            {
                e.printStackTrace();
                esito.setText(esito.getText() + "\n" + "ERRORE DI CONNESSIONE");
            } finally {
                try {
                    if ( hcon != null ) hcon.close();
                    if ( dis != null ) dis.close();
                } catch ( IOException ioe ) {
                    ioe.printStackTrace();
                }
            }
            String risposta = responseMessage.toString();
         }
    }
    Così avvio la connessione:
    codice:
    String url = "indirizzo connessione?user=xxxxxx&pass=xxxxxx";
    HttpGet invio = new HttpGet();
    Thread th = new Thread(invio);
    th.start();
    L'unica idea che mi è venuta è legata al fatto che forse una volta terminata la connessione il thread non si esaurisca automaticamente ma vada eliminiato manualmente però non saprei proprio come fare...Spero che qualcuno mi sia di aiuto. Grazie

  2. #2

    RISOLTO

    Ho risolto il problema:
    Dato che mi serviva richiamare la connessione da diversi punti dell'applicazione avevo fatto una dichiarazione del thread globale:
    codice:
    //dichiarazione globale
    HttpGet invio = new HttpGet();
    e poi localmente facevo partire il thread con:
    codice:
    //invocazione locale
    invio.start();
    
    .
    .
    .
    
    //invocazione locale
    invio.start();
    Risultato: FUNZIONAVA SOLO ALLA PRIMA CONNESSIONE

    Per risolvere ho spostato tutto a livello locale, dichiarando il thread + volte con nomi diversi:
    codice:
    //la prima volta
    HttpGet invio = new HttpGet();
    invio.start();
    
    //la seconda volta
    HttpGet invio2 = new HttpGet();
    invio2.start();
    
    .
    .
    .
    Anche se dovessero partire + thread contemporaneamento non credo sia un problema perchè come ho letto sul sito Sun:When the thread returns from the run() method, the system terminates the thread. Quindi i thread terminerebbero automaticamente alla fine dell'esecuzione del metodo Run().

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.