Autore Topic: Problemi con lettura dati pulsante  (Letto 860 volte)

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Problemi con lettura dati pulsante
« il: 10 Maggio 2013, 11:01:12 CEST »
0
Ciao a tutti. Ho un piccolo problemino con questo(vedi sotto) codice il quale, però, è giusto. Il problema è che io spedisco via wifi quel messaggio e me ne deve tornare uno molto simile. Il messaggio arriva perfettamente il problema è che per leggerlo, quindi verificare gli if, devo premere due volte il pulsante.
Il problema penso sia risolvibile mettendo una pausa (non uno sleep ma qualcosa più simile ad un wait) ma non so come fare. Mi potreste aiutare? Grazie.
Ecco il codice:

Codice (Java): [Seleziona]
 th2o.setOnClickListener(new View.OnClickListener()
            {  
                        @Override
                        public void onClick(View v)
                        {
                                // TODO Auto-generated method stub
                                m3=new char [8];
                                m3[0]=0x1E;
                                m3[1]=0x04;
                                m3[2]=0x00;
                                m3[3]=0x02;
                                m3[4]=0x00;
                                m3[5]=0x01;
                                m3[6]=0x92;
                                m3[7]=0x65;
                                mtcpclient.fAttesa = false;
                                if(mtcpclient!=null)
                                {
                                 mtcpclient.sendMessage(m3);
                                }
                                if (mtcpclient.a[4] >= 0 && mtcpclient.a[4] <= 20)
                                {
                                        display3.setTextColor(Color.RED);
                                        display3.setText("Il livello dell'acqua è: 0%");
                                }
                                if (mtcpclient.a[4] > 20 && mtcpclient.a[4] <= 40)
                                {
                                        display3.setTextColor(Color.rgb(239,155,15));
                                        display3.setText("Il livello dell'acqua è: 25%");
                                }
                                if (mtcpclient.a[4] > 40 && mtcpclient.a[4] <= 60)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 50%");
                                }
                                if (mtcpclient.a[4] > 60 && mtcpclient.a[4] <= 85)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 75%");
                                }
                                if (mtcpclient.a[4] >85 && mtcpclient.a[4] <= 105)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 100%");
                                }
                                if (mtcpclient.a[4] < 0 || mtcpclient.a[4] > 105)
                                {
                                        display3.setTextColor(Color.RED);
                                        display3.setText("ERROR");
                                }
                        }
                });    
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con lettura dati pulsante
« Risposta #1 il: 10 Maggio 2013, 11:41:57 CEST »
0
Mi potreste aiutare? Grazie.

Dovresti spiegare abbastanza più in dettaglio cosa fa l'applicazione, come è strutturata e descrivere in dettaglio cosa sono le varie parti del codice (ad esempio cosa è mtcpclient? cosa fa sendmessage? cosa è mtcpclient.a[]?). Magari è anche l'occasione di mettere commenti nel codice.  ;-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con lettura dati pulsante
« Risposta #2 il: 10 Maggio 2013, 11:56:27 CEST »
0
Che sciocco, hai ragione!  :-)
Sotto questa breve spiegazione scrivo il codice commentato. Allora l'app ha dei pulsanti (ImageButton) che, se premuti, mandano un messaggio (m3 nella fattispecie)tramite wi-fi in connessione tcp-ip ad un server il quale risponde immediatamente con una risposta analoga. Questa risposta viene memorizzata in un array, per l'appunto, a[]. Alla posizione a[4] ho l'informazione da controllare per modificare la textview "display3".
mtcpclient serve per richiamare la classe da me creata TCPClient la quale si adopera, tramite un ciclo, ad attivare il processo di spedizione dei vari pezzi dell'array. La comunicazione e tutto funziona, il fastidio è che per leggere la risposta del server devo premere due volte l'imagebutton.
Ecco, scusate la mancanza di spiegazione  :D
A voi, signori, il codice commentato:

Codice (Java): [Seleziona]
th2o.setOnClickListener(new View.OnClickListener()
            {  
                        @Override
                        public void onClick(View v)
                        {
                                // TODO Auto-generated method stub
                                m3=new char [8]; //messaggio di richiesta di lettura registri da mandare al server
                                m3[0]=0x1E;
                                m3[1]=0x04;
                                m3[2]=0x00;
                                m3[3]=0x02;
                                m3[4]=0x00;
                                m3[5]=0x01;
                                m3[6]=0x92;
                                m3[7]=0x65;
                                mtcpclient.fAttesa = false; //setta l'array più piccolo, quello usato per le risposte "corte" del server
                                if(mtcpclient!=null)  // se la classe non è null manda il messaggio richiamando il metodo sendMessage della classe TCPClient
                                {
                                 mtcpclient.sendMessage(m3);
                                }
                                if (mtcpclient.a[4] >= 0 && mtcpclient.a[4] <= 20)       //da qui in poi viene controllata risposta. In particolare viene posta
                                {                                                                                  // l'attenzione sulla posizione a[4] dell'array dove viene "memorizzata"
                                        display3.setTextColor(Color.RED);                      // la risposta.
                                        display3.setText("Il livello dell'acqua è: 0%");
                                }
                                if (mtcpclient.a[4] > 20 && mtcpclient.a[4] <= 40)
                                {
                                        display3.setTextColor(Color.rgb(239,155,15));
                                        display3.setText("Il livello dell'acqua è: 25%");
                                }
                                if (mtcpclient.a[4] > 40 && mtcpclient.a[4] <= 60)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 50%");
                                }
                                if (mtcpclient.a[4] > 60 && mtcpclient.a[4] <= 85)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 75%");
                                }
                                if (mtcpclient.a[4] >85 && mtcpclient.a[4] <= 105)
                                {
                                        display3.setTextColor(Color.rgb(154,185,115));
                                        display3.setText("Il livello dell'acqua è: 100%");
                                }
                                if (mtcpclient.a[4] < 0 || mtcpclient.a[4] > 105)
                                {
                                        display3.setTextColor(Color.RED);
                                        display3.setText("ERROR");
                                }
                        }
                });    
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con lettura dati pulsante
« Risposta #3 il: 10 Maggio 2013, 12:22:39 CEST »
0
Secondo me devi disaccoppiare la logica del programma dall'interfaccia grafica: al click del button lanci un asynctask che si occupa di inviare il messaggio, attendere la risposta del server e processarla.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con lettura dati pulsante
« Risposta #4 il: 10 Maggio 2013, 12:29:05 CEST »
0
Interessante. Mi informi sugli Asyntask e poi faccio una prova.
Grazie mille bradipao, ti farò sapere!  :-)
Andrea

Offline andrea_g

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • andreagorfer
    • @andreagorfer
    • Mostra profilo
    • Bondon's Crew
  • Dispositivo Android:
    Galaxy S3
  • Sistema operativo:
    Max OS X 10.9.2
Re:Problemi con lettura dati pulsante
« Risposta #5 il: 22 Maggio 2013, 15:37:46 CEST »
0
Mi sto informando un po' sugli AsyncTask, secondo te come dovrei impostarlo?

pensavo così:

public class  clickButton extends AsyncTask <Null, ?? , Null>
{
   @Override
   // tutta la funzione sopra del messaggio da spedire
  return null;
}

e all'interno del public void OnClick
inserire

clickButton.run();

è giusto o è una cavolata enorme?

Grazie mille!
Andrea

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Problemi con lettura dati pulsante
« Risposta #6 il: 22 Maggio 2013, 19:27:05 CEST »
0
Nella sezione dei tutorial c'è un mio vecchio post su una applicazione degli asynctask per fetch di dati dalla rete. Penso sia ancora valido per comprendere la filosofia.

[facile] HttpBookSearch: AsyncTask, HttpClient, XML parsing, ProgressDialog - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store