Autore Topic: thread, runnable e passaggio di dati tra due classi  (Letto 1639 volte)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
thread, runnable e passaggio di dati tra due classi
« il: 21 Febbraio 2011, 06:41:43 CET »
0
Ok rischio di essere paranoico perchè ne abbiamo già parlato ma ancora non sono riuscito a vedere un piccolo esempio per risolvere il mio problema. Mi scuso magari con i moderatori per la ripetizione dei post ma forse questo è più generale.



Salve non ho ancora trovato un pratico esempio di Runnable , Thread e passaggio dei dati da una classe ed un' altra.

La mia esigenza è creare un sistema separato per caricare, parsare e serializzare dei dati.
Ovvio che per caricare i dati da una fonte esterna come WebService ho bisogno di un nuovo thread ma in qualsiasi tutorial questo thread o l' uso di AsyncTask viene implementato nella classe stessa e secondo me e  la logica OOP mi porta a tentare di separare il codice e dopotutto non posso scrivere ogni volta lo stesso codice per 5-6 Activity.

Quindi la domanda è : come faccio ad usare sempre la stessa classe che carica, parsa, serializza e invia i dati all'activity richiedente?

Piccolo esempio.

package com.example;

import android.app.Activity;
import android.os.Bundle;

Codice (Java): [Seleziona]
public class MainClass extends Activity {
    private UtilClass u_load;

        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        u_load= new UtilClass();
        u_load.loadData("http://www.mysite.com/data.xml");
       
       
    }
}


Codice (Java): [Seleziona]
package com.example;

public class UtilClass {
        public UtilClass() {
                // TODO Auto-generated constructor stub
        }
       
        void loadData(String path){
               
               
                Thread t = new Thread() {
            public void run() {
                mResults = doSomethingExpensive();
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
        }

}

Qui ho semplificato ma l' idea rimane: una classe separata che ha il compito solo di caricare i dati e passarli al richiedente.

Potrei risolvere con un' altra Activity class utilizzadno startActivityForResult
ma onestamente non mi piace
La domanda stupida è quella che non si fa

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:thread, runnable e passaggio di dati tra due classi
« Risposta #1 il: 21 Febbraio 2011, 09:14:16 CET »
0
Potresti fare in modo che la tua activity funga da dispatcher per tutte le attività che devi svolgere, eseguendo le singole classi come thread.
Puoi fare in modo che tale dispatcher ascolti dei messaggi (magari faccia da broadcast receiver per messaggi solo per la stessa classe) e si comporti di conseguenza.
Ogni singola attività, alla fine, invia un messaggio che viene ricevuto dal dispatcher e che effettui le dovute operazioni.
Te la butto sul generico, ma se hai bisogno si può scendere più in dettaglio.
Anzi, sono sicuro che la mia soluzione può essere migliorata, ma serve solo per darti un'idea sul da farsi.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re: thread, runnable e passaggio di dati tra due classi
« Risposta #2 il: 21 Febbraio 2011, 09:25:01 CET »
0
Ma si potrei..ma solo per.caricare dei dati...mi sembra troppo... meglio una semplice classe

Sent from my GT-I9000 using Tapatalk
La domanda stupida è quella che non si fa

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:thread, runnable e passaggio di dati tra due classi
« Risposta #3 il: 21 Febbraio 2011, 09:45:39 CET »
0
Non vedo dove stia il problema nel fare il tutto in classi separate.
Non aumenti la complessità, ma riesci a modularizzare il codice.

Comunque puoi sempre utilizzare la classe handler e con questa processare le operazioni in base al messaggio ricevuto.
La stessa logica, ma più in piccolo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:thread, runnable e passaggio di dati tra due classi
« Risposta #4 il: 21 Febbraio 2011, 09:59:42 CET »
0
Due semplicissime soluzioni:

1) Passi un oggetto Handler al metodo loadData.
2) Utilizzi il pattern Observer