Autore Topic: thread che non parte  (Letto 716 volte)

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
thread che non parte
« il: 18 Settembre 2012, 10:02:09 CEST »
0
Ciao ragazzi, sto facendo una prova con un thread. Ho una classe activity che lancia un thread e poi aspetta che quest'ultimo modifichi un valore per fare un'operazione. Ora so che questa non è una pratica corretta ma serve per fare un test, se va bene vedrò come implementarlo meglio. Il punto è che il thread sembra non partire proprio, e di conseguenza l'applicazione si blocca. Sapete dirmi perché? Ecco il codice della classe activity:

Codice: [Seleziona]
public class ProvaThread extends Activity{
        @Override
        public void onCreate(Bundle savedInstanceState) {
                         super.onCreate(savedInstanceState);
                         setContentView(R.layout.soap_activity_main);
           
        }
       
        public void doThreadCall(View view) {
                //String android_id = Secure.getString(getContentResolver(),Secure.ANDROID_ID);
            TextView textView1 = (TextView) findViewById(R.id.textView1);
           
            ResponseObject responseObject = new ResponseObject();
            ProvaThread thread = new ProvaThread(responseObject);
            thread.start();
         
            while(!responseObject.isChanged()){}
         
            textView1.setText("risultato della chiamata: "+responseObject.getResponse());
        }
}

L'activity ha un'interfaccia con una textview ed un pulsante, premendo il pulsante dovrebbe partire il thread, e poi con l'oggetto responseObject che contiene una stringa ed un valore booleano che serve per indicare se il thread ha finito il suo lavoro

Ecco il codice del thread:
Codice: [Seleziona]
public class HttpCallerThread extends Thread {

        private  String soapAction;
        private  String methodName;
        private  String nameSpace;
        private  String url;
        private  ResponseObject responseObject;

        public ProvaThread(ResponseObject responseObject){

                this.responseObject = responseObject;
        }

        public void Run() {
                        int result=0;
                        for(int i=1;i<10;i++){
                                result +=i;
                                Log.v("VALORE RESULT",""+i);
                        }
                        responseObject.setResponse(""+result);
                        responseObject.setChanged(true);
        }
       
        public String getUrl() {
                return url;
        }

        public String getNameSpace() {
                return nameSpace;
        }

        public String getMethodName() {
                return methodName;
        }

        public String getSoapAction() {
                return soapAction;
        }
}

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:thread che non parte
« Risposta #1 il: 18 Settembre 2012, 10:13:24 CEST »
0
E' inutile che fai partire un thread separato se dopo blocchi il thread principale dell'activity. Qua:
Codice (Java): [Seleziona]
while(!responseObject.isChanged()){}
Una implementazione corretta è veramente molto simile alla tua: passa al thread un handler che hai creato nell'activity, avvia il thread, e fai in modo che alla conclusione delle operazione il thread spedisca un messaggio all'handler dell'activity.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store