Autore Topic: eventi personalizzazioni, listerner e dispatcher  (Letto 2253 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
eventi personalizzazioni, listerner e dispatcher
« il: 27 Gennaio 2011, 14:07:17 CET »
0
Mi scuso ma la domanda è banale per chi programma da tempo in Java.

Il mio problema è gestire gli eventi di classi personalizzate.

Ho due classi: ClasseA e ClasseB

ClasseA si serve di ClasseB per fare qualcosa, la classe ClasseB dopo aver fatto qualcosa (che so comunica con il Database) comunica alla ClasseA che ha finito e magari passa dei dati.

In pratica si tratta di Listener e Dispatcher

Lo so che è Java base ma ho studiato Java più di 10 anni fa e non ricordo mica...

In Actionscript faccio cosi.

Classe che estende la classe Event
Codice (ActionScript 3): [Seleziona]
package  {
        import flash.events.Event;

       
        public class CommunicationEvents extends Event {
                public var obj_send:*;
               
                public static const DATA_LOADED : String = "data_loaded";
                public static const DATA_NOLOADED : String = "data_noloaded";
               

                public function CommunicationEvents(type : String, bubbles : Boolean = false, cancelable : Boolean = false, d :*= null) {
                        super(type, bubbles, cancelable);
                        this.obj_send = d;
                       
                }
               
                public override function clone() : Event {
                        return new CommunicationEvents(type, bubbles, cancelable, obj_send, obj_send2, obj_send3, obj_send4);
                }

                public override function toString() : String {
                        return formatToString("CommunicationEvents", "type", "bubbles", "cancelable", "eventPhase", "obj_send");
                }
       
}
}

ClasseA che crea il listener
Codice (ActionScript 3): [Seleziona]
var classeB:ClasseB= new ClasseB();
classeB.addEventListener(CommunicationEvents.DATA_LOADED, onLoadData);
classeB.getBulletins();


        private function onLoadData(event : CommunicationEvents) : void {
                        trace("dati caricati");
                       
                        }

classe ClasseB che dopo aver fatto determinate azioni dispaccia alla ClasseA che ha finito
Codice (ActionScript 3): [Seleziona]
dispatchEvent(new CommunicationEvents(CommunicationEvents.DATA_LOADED, false, false, alll_year));

Avete qualche esempio semplicissimo o una risorsa che mi spieghi meglio questo concetto  ? Esiste in android/java la gestione di questi eventi personalizzati?




La domanda stupida è quella che non si fa

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #1 il: 27 Gennaio 2011, 19:17:33 CET »
0
se parli di android, si usa
startActivityForResult guarda sulla documentazione ufficiale!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #2 il: 27 Gennaio 2011, 19:27:30 CET »
0
Quoto e terrei a precisare che non serve che posti codice ActionScript, basta solo che spieghi cosa ti serve ;)

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:eventi personalizzazioni, listerner e dispatcher
« Risposta #3 il: 27 Gennaio 2011, 20:13:12 CET »
+1
Ti scrivo cosa ho scoperto io sperimentando, sicuramente ci saranno imprecisioni.

EDIT : ovviamente oltre alla comunicazione tra activity citata sopra.

Tu parli di comunicazione tra classi, ma immagino che ti stia riferendo a comunicazione tra thread diversi, dato che da quanto descrivi vengono eseguiti separatamente. Molto pragmaticamente io divido in tre i possibili approcci:
  • AsyncTask : Il metodo più semplice da un punto di vista dell'implementazione pratica, pensalo come un wrapper ad una classe Thread, che ti fornisce già belli e pronti i metodi per comunicare con il Thread della UI. Va usato per attività di massimo qualche secondo, perchè soggetto a kill automatico se dura troppo. Esempio di uso: download di qualcosa dalla rete.
  • Thread/Runnable : Simile a quello sopra, ma gestisci più cose a mano, inclusa la creazione del Thread vero e proprio. Thread diversi puoi farli comunicare con Handler di messaggi. Sono da usare per operazioni più lunghe di quelle di cui sopra, ma anche questi sono soggetti a kill unilaterale da parte del sistema (almeno da quanto ho capito). Esempio di uso: un thread che si occupa di gestire il traffico dati da/verso una periferica Bluetooth.
  • Service : Questi sopravvivono quanto vuoi.

Per gli AsyncTask c'è qualche esempio nel forum. Per i Thread volevo scriverne uno molto basic dato che sto facendo esperimenti proprio in queste settimane. Servizi non ne so niente.
« Ultima modifica: 27 Gennaio 2011, 20:17:06 CET da bradipao »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:eventi personalizzazioni, listerner e dispatcher
« Risposta #4 il: 03 Febbraio 2011, 05:53:20 CET »
0
Scusate ho letto solo adesso le risposte, non mi sono arrivate le comunicazioni via email.

Per quanto riguarda startActivityForResult non credo sia il caso nel senso che non devo creare un nuova Activity solo per ottenere dei dati. Io userei le classi.

Ricky scusami per Actionscript ma è molto simile a Java e conoscendolo bene pensavo che in questo modo mi facessi capire meglio.

La mia esigenza è semplice, creare un sistema che recupera dati e li ripassa alla class principale. L' Activity X ha bisogno di ottenere dati da un webservice, io non scriverei mai il codice che recupera i dati direttamente nell' Activity ma di solito creo un 2-3 classi che hanno il compito di fare questo e alla fine inviano i dati alla classe principale. Siccome il recupero dei dati via web non è sincrono pensavo di creare un sistema di Listener.


Non so se mi può aiutare AsyncTask, vediamo.. me lo studio, ne dubito ma ti farò sapere.

In OOP la strada principale sono i Listener e i Dispatcher , vedo se posso usare qualche esempio Java ed implementarlo in Android



La domanda stupida è quella che non si fa

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:eventi personalizzazioni, listerner e dispatcher
« Risposta #5 il: 03 Febbraio 2011, 08:36:21 CET »
0
Siccome il recupero dei dati via web non è sincrono pensavo di creare un sistema di Listener.

Ti ho risposto estesamente di là, ma vale la pena scrivere una cosa anche qua per evitare confusione in chi dovesse leggere. Data una funzione mediamente onerosa, non è che hai scelta, tu DEVI farla fare ad un thread separato, perchè Android te lo impone (se il thread della UI si attarda qualche secondo in esecuzione, l'applicazione viene terminata).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #6 il: 03 Febbraio 2011, 09:17:28 CET »
0
mi intrometto per dire la mia:
Nel mio progetto di tesi devo scaricare dati in formato JSON da diversi link (dinamici), quindi poi devo parsare i JSON per farli diventare objects che poi verranno utilizzati dall'UI.
Io l'ho implementato cosi:
nell'activity che vuole i dati creo un handler che fa lo switch sugli arg1 e arg2 dei message che riceve.
Quando servono i dati, l'activity lancia il DownloadThread che si occupa di connettersi,scaricare la stringa JSON e restituirla all'handler ricevuto nel costruttore. Questo handler è quello dell'activity, che in caso di arg1 = DOWNLOAD_COMPLETED avvia il thread di parsing (abbastanza oneroso) ripassandogli l'handler stesso.
Questo thread di parsing, una volta completato tutto restituisce nel message object l'oggetto parsato, e negli arg1 e 2 gli stati del parsing. In caso di PARSING_OK avvia una specifica funzione dell'activity.
Avevo pensato a fare un AsyncTask per il donwload, visto che è generico e serve per TUTTE le richieste in GET, ma alla fine io di interazione con l'UI ne ho poca o niente nel DownloadThread, e mi fa comodo averlo in un'altra classe, cosi da non doverlo estendere o creare in ogni Activity.
Il parsing thread piuttosto potrebbe essere fatto in un asyncTask, ma in questo caso dovrei fargli richiamare delle funzioni static di parsing e non mi piace la cosa.
Ovviamente se qualcuno conosce un metodo migliore per fare JSON->Object, si accettano estensioni :D
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #7 il: 03 Febbraio 2011, 09:35:59 CET »
0
OT:
Nicola, il parsing del json lo fai tramite questo vero?
JSONObject | Android Developers

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #8 il: 03 Febbraio 2011, 12:42:04 CET »
0
In OOP la strada principale sono i Listener e i Dispatcher , vedo se posso usare qualche esempio Java ed implementarlo in Android

Ok facci sapere se trovi qualcosa.
Credo che il design pattern corrisponte sia l'observer.

mi intrometto per dire la mia:
Nel mio progetto di tesi devo scaricare dati in formato JSON da diversi link (dinamici), quindi poi devo parsare i JSON per farli diventare objects che poi verranno utilizzati dall'UI.
Io l'ho implementato cosi:
nell'activity che vuole i dati creo un handler che fa lo switch sugli arg1 e arg2 dei message che riceve.
Quando servono i dati, l'activity lancia il DownloadThread che si occupa di connettersi,scaricare la stringa JSON e restituirla all'handler ricevuto nel costruttore. Questo handler è quello dell'activity, che in caso di arg1 = DOWNLOAD_COMPLETED avvia il thread di parsing (abbastanza oneroso) ripassandogli l'handler stesso.
Questo thread di parsing, una volta completato tutto restituisce nel message object l'oggetto parsato, e negli arg1 e 2 gli stati del parsing. In caso di PARSING_OK avvia una specifica funzione dell'activity.
Avevo pensato a fare un AsyncTask per il donwload, visto che è generico e serve per TUTTE le richieste in GET, ma alla fine io di interazione con l'UI ne ho poca o niente nel DownloadThread, e mi fa comodo averlo in un'altra classe, cosi da non doverlo estendere o creare in ogni Activity.
Il parsing thread piuttosto potrebbe essere fatto in un asyncTask, ma in questo caso dovrei fargli richiamare delle funzioni static di parsing e non mi piace la cosa.
Ovviamente se qualcuno conosce un metodo migliore per fare JSON->Object, si accettano estensioni :D

Anche io avrei fatto in questo modo, credo sia la soluzione piu' pulita.
La cosa carina e' che all'interno della classe DownloadThread puoi implementare la tua logica di gestione del multithread e della concorrenza, ad esempio tramite una ThreadPool o una coda di chiamate, a seconda di quello che ti serve.
« Ultima modifica: 03 Febbraio 2011, 12:47:16 CET da Ricky` »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #9 il: 03 Febbraio 2011, 14:14:12 CET »
0
OT:
Nicola, il parsing del json lo fai tramite questo vero?
JSONObject | Android Developers
si chiaro, mi chiedevo se esisteva qualcosa tipo marshal e unmarshal di jersey, che dato l'object con specifiche annotazioni ti genera dal JSON l'oggetto, e se il json non contiene alcuni valori li setta gia al valore di default specificato o a null...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:eventi personalizzazioni, listerner e dispatcher
« Risposta #11 il: 04 Febbraio 2011, 09:39:38 CET »
0

 google-gson -
 
 Project Hosting on Google Code

Gson User Guide - gson
grazie! me lo devo guardare fuori perchè cosi al volo non mi pare riesca a fare tutto quello che mi serve (oggetti con sottoggetti, collection ecc),
pero magari per snellire un po il codice lo posso usare! thx!
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

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:eventi personalizzazioni, listerner e dispatcher
« Risposta #12 il: 07 Febbraio 2011, 22:28:12 CET »
0
Ok ragazzi penso di usare i Thread, se avete qualche esempio semplicissimo è molto gradito anche un trread che non fa nulla. Mi serve la comunicazione tra 2 classi dopo che una classe ottiene dei dati.

Non ho avuto tempo ma in settimana sperimento qualcosa e vi faccio sapere.
La domanda stupida è quella che non si fa

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia