Autore Topic: Passare una lista di oggetti da un thread all'activity principale: come??  (Letto 923 volte)

Offline Noisemaker

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Ciao a tutti :)
Vi chiederei aiuto su un problema che sto riscontrando nella mia app..
In pratica ho l'activity principale che ha una list view che deve essere riempita con roba che viene letta da un thread separato (il carico di lavoro implica un loading time di un paio di secondi quindi ho preferito comunque delegare il compito ad un thread separato).
Questo thread ha una ArrayList di oggetti definiti da me.
Come posso fare per passare questa array list all'activity principale?

Per darvi due indicazioni su cosa sto provando a fare, leggo i messaggi tramite query e li inserisco nella list view.
La struttura dati che ho usato è:
- oggetto messaggio
- oggetto conversazione (formato da lista di messaggi ordinati per data)
- lista di convesazioni (ordinata per data)

PS:
Tra l'altro tra le varie prove che ho fatto oggi ad un certo punto mi dava un errore strano su gralloc module (non ho annotato stupidamente l'errore). Il tutto è scomparso cancellando alcuni messaggi...problema di ram??

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passare una lista di oggetti da un thread all'activity principale: come??
« Risposta #1 il: 02 Giugno 2012, 17:08:39 CEST »
0
Se la classe Thread che hai implementato è una inner-class della tua activity puoi semplicemente condividere la variabile tra thread ed activity e utilizzare un Handler per notificare all'activity che il thread ha finito Ti ho abbozzato (scrivendolo a memoria):

Codice (Java): [Seleziona]
public class MyActivity extends Activity{

        List<Classe> myList;

        Handler myHandler = new Handler {
                @Override
                public void handleMessage(Message msg) {
                        refreshListView();
                }
        }

        void refreshListView(){
                //qui dentro crei l'adapter, lo assegni alla listview, ecc ecc
        }

        //....

        class MyThread extends Thread{


                @Override
                public void run(){
               
                        myList= //Tutto quello che devi
               
                        Message m = myHandler.obtainMessage();
                        myHandler.sendMessage(m);

                }

        }


}

Offline gnamgnam

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: +1
    • Mostra profilo
Re:Passare una lista di oggetti da un thread all'activity principale: come??
« Risposta #2 il: 02 Giugno 2012, 17:56:44 CEST »
0
forse faresti meglio ad usare un AsyncTask piuttosto che la classe thread/runnable

AsyncTask | Android Developers

 ... l'asynctask si comporta esattamente come un thread pero' ha dei metodi molto utili per colloquiare con il main thread (UI thread)..ad esempio l'invio di dati al thread principale alla fine di una operazione che forse è quello che fa al caso tuo.

Offline Noisemaker

  • Utente junior
  • **
  • Post: 58
  • Respect: +1
    • Mostra profilo
Re:Passare una lista di oggetti da un thread all'activity principale: come??
« Risposta #3 il: 02 Giugno 2012, 18:05:55 CEST »
0
si infatti mi stavo studiando bene l'asyncthread e i risultati sono molto incoraggianti =) =)
Mi turba però l'errore che dicevo aver avuto prima sul gralloc... mi sembra impossibile sia la ram... non vorrei arrivare ad un certo punto e trovarmi di fronte a questo problema... voi sapete cosa sia? Su google non trovo nulla..