Autore Topic: Dubbio riguardo il lancio activity e le subroutine  (Letto 1088 volte)

Offline JohnMarco

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6 Edge
  • Sistema operativo:
    Windows 7 /Ubuntu 12.10
Dubbio riguardo il lancio activity e le subroutine
« il: 27 Marzo 2013, 21:02:52 CET »
0
Salve a tutti,
innanzitutto colgo l'occasione del mio primo post per presentarmi e per complimentarmi per questo forum, è sempre molto utile :)
Passo a descrivere il mio problema, che più che altro è un dubbio : nella mia applicazione, nel metodo onResume(), dopo qualche operazione viene richiamata una mia subroutine che deve effettuare alcune operazioni di connessione. Per prendere le info riguardanti il server cui connettersi, la subroutine lancia una sub_activity con startActivityForResult. E qui che nasce il mio problema : una volta richiamata questa funzione, la subroutine si ferma in attesa del risultato o termina? Perchè in fase di test l'app mi lancia una eccezione di nullPointer con errore "Unable to resume activity"


EDIT : il problema relativo al nullPointer l'ho risolto. Ma in fase di debug comunque ho notato che, dopo l'invocazione dello startActivityforResult la subroutine continua la sua esecuzione, non fermandosi dunque ad attendere i dati.. Come ovvio a questo problema?
« Ultima modifica: 27 Marzo 2013, 21:50:20 CET da JohnMarco »

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:Dubbio riguardo il lancio activity e le subroutine
« Risposta #1 il: 28 Marzo 2013, 08:16:34 CET »
0
EDIT : il problema relativo al nullPointer l'ho risolto. Ma in fase di debug comunque ho notato che, dopo l'invocazione dello startActivityforResult la subroutine continua la sua esecuzione, non fermandosi dunque ad attendere i dati.. Come ovvio a questo problema?

Essenzialmente sul sistema mobile Android niente (o quasi) è bloccante, per esempio non ci sono dialog modali. E' una scelta voluta dai creatori di android per evitare banalmente che il telefono si possa bloccare in attesa di qualcosa che non arriva mai.

Se hai letto la documentazione di base, alla startActivityforResult corrisponde anche la onActivityResult, che in pratica è la callback chiamata quando vengono restituiti i dati.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline JohnMarco

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6 Edge
  • Sistema operativo:
    Windows 7 /Ubuntu 12.10
Re:Dubbio riguardo il lancio activity e le subroutine
« Risposta #2 il: 28 Marzo 2013, 11:01:26 CET »
0
Ciao. Per prima cosa, grazie della risposta. Io ho già ridefinito la onActivityResult per intercettare i risultati, e questa funziona bene. Ma ti spiego cosa accade. Ad un certo punto della mia onResume() chiamo un metodo esterno, il quale fa sostanzialmente questo :
-chiamo una activity per fare inserire i dati
-opero sui dati (ciclicamente finchè non ho dati buoni o altre condizioni di uscita)
-restituisco il risultato.

Ovviamente, finchè nessuno inserisce dati, i campi su cui vado ad operare saranno vuoti. E infatti il mio metodo esterno cicla infinitamente su dati vuoti, e non mi compare nemmeno la nuova activity a video.
Posso imporre un blocco oppure la soluzione migliore è quella di modificare il metodo e, eventualmente, lavorare sui dati all'interno della onActivityResult()? 

Offline JohnMarco

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6 Edge
  • Sistema operativo:
    Windows 7 /Ubuntu 12.10
Re:Dubbio riguardo il lancio activity e le subroutine
« Risposta #3 il: 02 Aprile 2013, 10:26:45 CEST »
0
Nessuna idea ??

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:Dubbio riguardo il lancio activity e le subroutine
« Risposta #4 il: 02 Aprile 2013, 10:35:48 CEST »
0
Mi rendo conto adesso che non ho capito cosa devi/vuoi fare.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:Dubbio riguardo il lancio activity e le subroutine
« Risposta #5 il: 02 Aprile 2013, 10:57:22 CEST »
0
Citazione
lavorare sui dati all'interno della onActivityResult()
Questo è il metodo pensato apposta per quello che vuoi fare.

Nell' activity di inserimento (quando hai inserito i dati e vuoi tornare indietro nell onActivityResult), passi i dati (che hai inserito) nell'intent del metodo setResult() , poi chiami finish().
In questo modo avrai a disposizione quei dati all' interno del parametro Intent data di onActivityResult

Offline JohnMarco

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6 Edge
  • Sistema operativo:
    Windows 7 /Ubuntu 12.10
Re:Dubbio riguardo il lancio activity e le subroutine
« Risposta #6 il: 02 Aprile 2013, 12:03:19 CEST »
0
Infatti io lavoro con l'onActivityResult. Quel che stavo cercando di fare, e non riesco a capire il motivo per cui non funzioni, è questo :
-dal metodo onResume ()chiamo l'activity che farà le operazioni descritte sopra (quindi chiederà e leggerà dati)
-nel metodo onActivityResult, quando l'activity secondaria termina, verranno presi i risultati restituiti e, con queste, verranno settate alcune variabili
-Una volta settate le variabili, il metodo onResume riparte e lavora con dati nuovi.

In pratica l'activity secondaria ha come scopo principale il recuperare IP e porta per instaurare una connessione (in seguito anche altri parametri), mentre nella activity principale tali dati verranno usati per aprire una socket. Quel che accade, invece, è che mentre l'activity secondaria è in attesa dei dati, il metodo onResume della activity principale continua il suo corso e mi restituisce una eccezione in quanto tenta una connessione su parametri null , invece di fermarsi e attendere il completamento della activity secondaria

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:Dubbio riguardo il lancio activity e le subroutine
« Risposta #7 il: 02 Aprile 2013, 12:12:12 CEST »
0
-Una volta settate le variabili, il metodo onResume riparte e lavora con dati nuovi.

In pratica l'activity secondaria ha come scopo principale il recuperare IP e porta per instaurare una connessione (in seguito anche altri parametri), mentre nella activity principale tali dati verranno usati per aprire una socket. Quel che accade, invece, è che mentre l'activity secondaria è in attesa dei dati, il metodo onResume della activity principale continua il suo corso e mi restituisce una eccezione in quanto tenta una connessione su parametri null , invece di fermarsi e attendere il completamento della activity secondaria

Ora ho capito l'inghippo. Il meto do onResume non puoi bloccarlo, anche perchè quando torni all'activity da una activity secondaria, riparte da capo.

Guarda questa immagine esplicativa direttamente dalla documentazione ufficiale. Tu stai facendo il loop "another activity comes into the foreground".
Activity | Android Developers




Io fare la connessione in onResume se ci sono dati validi per farla, altrimenti dentro la onActivityResult se vengono ritornati dati validi.
« Ultima modifica: 02 Aprile 2013, 12:15:39 CEST da bradipao »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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:Dubbio riguardo il lancio activity e le subroutine
« Risposta #8 il: 02 Aprile 2013, 12:20:59 CEST »
0
ma poi c'è una ragione particolare per cui avvii l'activity in onResume() ?

Offline JohnMarco

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6 Edge
  • Sistema operativo:
    Windows 7 /Ubuntu 12.10
Re:Dubbio riguardo il lancio activity e le subroutine
« Risposta #9 il: 02 Aprile 2013, 14:28:50 CEST »
0
Grazie per le risposte prima di tutto. Ad ogni modo avvio tutto nella onResume perchè cercavo un modo per linearizzare il lavoro. Praticamente quel che sto facendo è trasportare una mia applicazione java su android, e quindi cercavo di ottenere qualcosa simile alle chiamate bloccanti in java. Ho provato anche a utilizzare funzioni esterne, ma anche qui una volta avviata l'activity secondaria il metodo continua fino alla fine... Comunque penso di aver capito come modificare il tutto, ci proverò a brevissimo :)

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Dubbio riguardo il lancio activity e le subroutine
« Risposta #10 il: 02 Aprile 2013, 15:19:31 CEST »
0
... cercavo di ottenere qualcosa simile alle chiamate bloccanti in java ...

Il disegno dell'interfaccia grafica di Android è quello di non essere bloccante in nessun modo. La gestione avviene attraverso degli eventi implementati con delle callback. Il codice delle callback non deve essere bloccante e non deve superare il tempo massimo concesso per la sua esecuzione.

La documentazione ufficiale spiega i dettagli:

http://developer.android.com/guide/components/processes-and-threads.html


Inviato dal mio LG-P990 con Tapatalk 2

adb logcat | tee /tmp/logcat | grep TAG