Autore Topic: Consiglio per aggiornamento activity  (Letto 921 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Consiglio per aggiornamento activity
« il: 25 Maggio 2011, 13:27:17 CEST »
0
Ciao a tutti. Vorrei un consiglio su come effettuare un operazione di refresh di un activity. In pratica nell'oncreate di questa activity faccio partire un thread che ha il compito di prelevare i dati dal web. Spesso però capita che questi dati non vengano presi perchè ad esempio il collegamento è lento oppure non è presente quindi faccio uscire un avviso di riprovare più tardi. Nella parte alta di questa activity ho messo una barra con un piccolo pulsantino che se cliccato dovrebbe riaggiornare la pagina e quindi riprovare a far partire il prelievo dei dati dal web. Mi chiedevo : secondo voi cosa dovrebbe fare questo pulsante ?

- Rilanciare l'intent per far partire ex novo l'ativity ? (mmm non credo)
- Richiamare un metodo che faccia partire ex novo il thread ?
- Altro che non mi viene in mente...

dato che mi trovo, vorrei chiedervi anche un'altra cosa....

Quando il thread preleva positivamente i dati dal web, viene mandato un messaggio positivo all'handler che provvede a visualizzare i dati prelevati, c'è possibilità di mettere nell'handler il setContentView del metodo onCreate in modo da visualizzare il layout solo se il thread  preleva i dati ?

Grazie!

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #1 il: 25 Maggio 2011, 14:10:41 CEST »
0
La cosa migliore era lanciare un Service piuttosto che un thread. In ogni caso, la cosa migliore da fare adesso è lanciare il thread.

Non capisco la domanda sul setContentView. Teoricamente il layout dell'activity è uguale sia nel caso in cui i dati ci sono sia nel caso in cui i dati non ci sono... al massimo ci sono elementi del layout visibili ed altri no.

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #2 il: 25 Maggio 2011, 14:43:43 CEST »
0
Ciao Marco e grazie per la ridposta, praticamente a me dà fastidio che mentre cè la ProgressDialog indeterminate si veda già sotto il layout vorrei che comparisse quando il thread ha finito il suo lavoro

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #3 il: 25 Maggio 2011, 15:20:25 CEST »
0
Allora non la visualizzare, ma in ogni caso il file xml del layout è lo stesso.

In poche parole devi agire su View.setVisibility, mentre c'è la progress la metti in GONE, appena togli la progress in VISIBLE.

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #4 il: 25 Maggio 2011, 17:14:37 CEST »
0
Ah ok!! Senti, perchè dici che ci vorrebbe un service per i dati? Il service nin si usa per le cose ricorrenti che devono svvenire in backgroung anche a programma chiuso?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #5 il: 25 Maggio 2011, 17:38:03 CEST »
0
Sotto il mio punto di vista (e seguendo la filosofia del framework android) tutte le volte che parli di "thread in background" parli di service.

Prova a premere il pulsante Home mentre la tua progress dialog è visualizzata... scommettiamo che vai in crash?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Consiglio per aggiornamento activity
« Risposta #6 il: 25 Maggio 2011, 18:03:36 CEST »
0
Potresti ancora meglio usare un IntentService e un ResultReceiver, come spiegato qui Android: restful API service - Stack Overflow

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #7 il: 25 Maggio 2011, 18:39:30 CEST »
0
No con home no ma quando metti il tel in modalitá landscape si ma questo lo fa anche InfoCosti Tre :-)

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:Consiglio per aggiornamento activity
« Risposta #8 il: 25 Maggio 2011, 23:38:53 CEST »
0
No con home no ma quando metti il tel in modalitá landscape si ma questo lo fa anche InfoCosti Tre :-)
lol.....
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 MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #9 il: 26 Maggio 2011, 10:08:54 CEST »
0
No con home no ma quando metti il tel in modalitá landscape si ma questo lo fa anche InfoCosti Tre :-)

Cosa fa InfoCosti Tre???  o_O

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #10 il: 26 Maggio 2011, 10:19:57 CEST »
0
Tempo fa ti segnalai che mentre c è il progressdialog tipo quando legge i cinema e metti in landscape va in errore

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #11 il: 27 Maggio 2011, 09:53:35 CEST »
0
Ciao Marco! hai dato un'occhiata al tuo errore ? praticamente ho visto che è lo stesso mio penso si tratti di un problema relativo al Dialog non al thread a quanto capisco portandolo ripetutamente dalla modalità normale a quella landscape, l'activity si riavvia sempre ed il Dialog non viene mai dismesso quindi alla fine va in errore....almeno credo che sia quello....

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #12 il: 31 Maggio 2011, 11:09:44 CEST »
0
Quelli sono errori di gioventù!  O:-)

InfoCosti Tre è la mia prima applicazione per android ed ancora stavo sperimentando e non conoscevo al massimo il framework. La ricerca del cinema è fatta in modo orribile con un Handler manuale (niente AsyncTask e niente Service) e non ha nessuna gestione di cambio di orientamento o layout (in effetti la prima versione di info costi l'avevo fatta only portrait proprio perché non sapevo bene come gestire queste cose). Se dovessi riscrivere quella parte non la farei assolutamente in questo modo ma userei sicuramente un Service.

La parte principale che ho totalmente riscritto, infatti non ha questo problema... quello è codice molto vecchio che non ho più toccato.

In ogni caso, ho fatto una piccola patch (semplicemente ho messo "keyboard|keyboardHidden|orientation" in config changes dell'activity in modo da non farla distruggere e quindi non causare problemi alla progress dialog), dalla versione 4.2 non ha più problemi di crash (anzi sappi ti ho messo nei ringraziamenti per la segnalazione!). Per info costi, per il momento, creo soltanto patch al volo, e quindi va bene cosi. Per un programma ex novo (ti ripeto) avrei cambiato totalmente tutto!

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #13 il: 31 Maggio 2011, 11:51:00 CEST »
0
Grazie per i ringraziamenti !! ;) però una cosa mi devi spiegare...perchè utilizzare un Service ? cioè io il service lo vedo più come un....servizio (appunto) che deve stare li per poi fare delle cose quando gli viene chiesto tipo ascoltare degli eventi, far partire un alarm, aggiornare dei dati giornalmente, etc ma perchè utilizzarlo per aggiornare dei dati che vengono presi in tempo reale come nel caso della tua applicazione e che quindi vengono visualizzati sul momento ?

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Consiglio per aggiornamento activity
« Risposta #14 il: 31 Maggio 2011, 12:14:57 CEST »
0
Il discorso è sempre lo stesso: perché devi pensare in grande! ;)

Quando ho fatto quella parte di codice non conoscevo i service, quindi non li ho considerati, ma sapevo perfettamente che stavo sbagliando!

Nel tipico diagramma MVC aggiornare i dati fa parte di una logica di Model, mentre la progress dialog fa parte di una logica di View.

Creare una Progress Dialog in un Handler (quello che attualmente ho fatto io) significa unire in modo stretto e dipendente l'aggiornamento dei dati con la visualizzazione dei dati (Model + View) e questo porta ad un grosso problema di progettazione.

Pensando in grande invece bisogna fare in modo che i due modelli siano totalmente distinti ed indipendenti.

Perché pensare in grande? Semplice: supponi di voler creare in InfoCostiTre un widget per il cinema... Crei una nuova View (il widget appunto) che deve aggiornare i dati e quindi utilizzare un pezzo di codice già esistente (diciamo l'Handler di sopra). Ma per come ho costruito l'aggiornamento dei dati, essendo propri dell'Activity sono costretto a fare un copia ed incolla del codice anche sul widget con i relativi problemi di manutenzione, modularità e complessità.

Se avessi usato un Service per l'aggiornamento dei dati (come accade per la pagina principale ed il relativo widget) non avrei avuto alcun problema! Esistono due entità diverse di View che utilizzano il medesimo servizio di aggiornamento che è totalmente indipendente dalle View stesse. Non solo, essendo tutte le viste totalmente indipendenti ma utilizzando tutte la stessa interfaccia per l'aggiornamento, mi basta aggiornare i dati in una delle viste che tutte in automatico vengono aggiornate.

Il service serve proprio a questo: rendere indipendente la View dal Model, ovvero rendere un software perfetto sotto il punto di vista architetturale.
« Ultima modifica: 31 Maggio 2011, 12:16:28 CEST da MarcoDuff »