CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: megthebest con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: megthebest con ben 4 Thanks ricevuti negli ultimi sette giorni
Utente del mese: megthebest con ben 21 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

Timer

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jul 2010
    Messaggi
    28

    Ringraziamenti
    3
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Timer

    Buongiorno ragazzi. Ho un altro piccolo problemino.
    Ho il mio modestissimo client, che si collega ad un server. Nella richiesta di connessione a quest'ultimo o alla creazione del socket e dei relativi buffer, vorrei che partisse un timer (non visibile) per evitare che mi si congeli la schermata e mi si blocchi l'emulatore. Ho pensato questa soluzione:

     
    1
    public int connetti(String ip , int port) {
    2
            
    3
            temp = new String[1];
    4
            temp[0] = new String();
    5
            
    6
            timer = new CountDownTimer(5000,5000) {
    7
                
    8
                @Override
    9
                public void onTick(long millisUntilFinished) {
    10
                    // TODO Auto-generated method stub
    11
                    //non fa niente
    12
                }
    13
                
    14
                @Override
    15
                public void onFinish() {
    16
                    // TODO Auto-generated method stub
    17
                    temp[0] = "KO";
    18
                }
    19
                
    20
            }.start();
    21
        
    22
                try{
    23
                    ipAddress = InetAddress.getByName(ip);
    24
                    }catch(UnknownHostException e){
    25
                        e.printStackTrace();
    26
                        timer.cancel();
    27
                        return 1;
    28
                    }
    29
                    
    30
                try{
    31
                    
    32
                    socket = new NewSocket(ipAddress,port);
    33
                                
    34
                }catch(IOException e) {
    35
                    e.printStackTrace();
    36
                    timer.cancel();
    37
                    return 2;
    38
                }
    39
                            
    40
                try {
    41
                    
    42
                    reader = new NewBufferedReader(new InputStreamReader(socket.getInputStream()));
    43
                    
    44
                    writer = new NewPrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
    45
                
    46
                } catch (IOException e) {
    47
                    e.printStackTrace();
    48
                    timer.cancel();
    49
                    return 3;
    50
                }
    51
                    
    52
                    
    53
            if(temp[0].equalsIgnoreCase("KO")) return 5;
    54
            timer.cancel();
    55
            
    56
            return 0;
    57
            
    58
        }


    Il valore di ritorno (int) mi serve soltanto per gestire poi il tipo di errore e regolarmi di conseguenza..

    In questo modo pero non riesco cmq a far ritornare dal metodo un valore..

    Qualcuno può darmi una mano? Grazie mille.

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Ma quel timer così è assolutamente inutile
    Non fa altro che cambiare una stringa! Il resto del programma non ne viene minimamente influenzato.

    Quello che ti consiglio di fare è:

    1 - nell'activity che deve fare la connessione ti crei un bel
    1
     
    1
    Handler handler = new Handler();

    2 - dentro il metodo connetti ci metti semplicemente
    5
     
    1
    public int connetti(String ip , int port) {
    2
            
    3
            handler.post(connectTask);
    4
            
    5
        }

    3 - nella onCreate() di questa activity ci metti
    1
     
    1
    connectTask = new ConnectTask(this, altra roba che ti serve);

    4 - crei ovviamente una tua classe ConnectTask
    x
     
    1
    public class ConnectTask implements Runnable{
    2
    3
        ActivityChiamante activity;
    4
        Timer timer = new Timer();
    5
    6
        public ConnectTask (ActivityChiamante a){
    7
            activity=a;
    8
        }
    9
    10
        TimerTask myTask = new TimerTask(){
    11
           public void run(){
    12
               //qui annulli la connessione che stai provando ad effettuare nella run qui sotto
    13
           }
    14
        };
    15
    16
        public void run(){
    17
           timer.schedule(myTask, 5000);
    18
           //qui dentro provi a fare la connessione, tutto quello che succede
    19
           //qui dentro non influenza l'activity in quando viene eseguito in un
    20
           //thread differente
    21
           //poi se riesci a fare la connessione chiamerai activity.qualcheMedoto() e annulli il timer di cui sopra
    22
        }
    23
    24
    }


    Spero sia chiaro. Il codice l'ho scritto ora di getto quindi probabilmente c'è qualche errore
    Ultima modifica di eafkuor; 27-08-10 alle 14:54

  4. Il seguente Utente ha ringraziato eafkuor per il post:

    joaocominho (28-08-10)

  5. #3
    Baby Droid


    Registrato dal
    Jul 2010
    Messaggi
    28

    Ringraziamenti
    3
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    Ma quel timer così è assolutamente inutile
    Non fa altro che cambiare una stringa! Il resto del programma non ne viene minimamente influenzato.
    Hai assolutamente ragione. Lo stavo usando come variabile di controllo per un'altra activity che chiamava il metodo connetti, perchè con altre variabili il metodo run del timertask mi dava problemi... Ma stavo facendo soltanto una confusione madornale.
    Spero sia chiaro. Il codice l'ho scritto ora di getto quindi probabilmente c'è qualche errore
    Più chiaro di così... Grazie mille eafkuor!

  6. #4
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Figurati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy