Autore Topic: Passaggio da una activity ad un'altra con AlertDialog  (Letto 982 volte)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #15 il: 09 Giugno 2010, 09:53:00 CEST »
0
Sisi anche a me sembrano molto più puliti! Solo che devo ancora pensare a come risolvere il problema che siano appunto..."async" tipo se hai bisogno di sincronizzare due esecuzioni, ovvero nell'asnync task scarichi i dati mentre dovresti bloccare l'esecuzione del "main" finchè non arrivano certi risultati....sto maledetto esame di Sistemi Informativi mi sta togliendo un sacco di tempo che vorrei dedicare ad Android  :'(

Offline wariat

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc magic
  • Sistema operativo:
    Windows
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #16 il: 09 Giugno 2010, 11:08:43 CEST »
0
con un AsyncTask:
nel metodo onPreExecute fai partire la progress dialog
nel metodo doInBackground scarichi i dati
se non è una progress indererminata, nel metodo onProgressUpdate incrementi il progresso
ed infine del metodo onPostExecute interrompi la progress e visualizzi il risultato

:)

Ho fatto come dici, ora l'applicazione quando parte da sempre la "noiosa schermata nera" ma anche un "bellissimo" progressDialog/toast (li ho provati entrambi e devo decidere quale inserire).
ma ora non mi viene piu` visualizzato lo Splash Screen.. credo che il passaggio da un'activity ad un'altra sia troppo veloce e quindi non mi da il tempo per visualizzarla.

ora purtroppo non ho il codice ma piu` o meno e` cosi`..

in splashscreen creo una classe privata asynctask che :

nel metodo onPreExecute fai partire la progress dialog/toast
nel metodo doInBackground fa partire l'activity main dove vengono caricati e mostrati i dati

nel metodo onCreate di splashscreen carico il layout con il testo e l'immagine da visualizzare come splashscreen e poi lancio blablabla.execute() per lanciare l'asynctask.

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 719
  • Respect: +169
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Nexus One - Wildfire - Magic
  • Market Developer Name:
    egsolutions
  • Sistema operativo:
    Ubuntu 10.10, Windows 7
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #17 il: 09 Giugno 2010, 12:18:20 CEST »
0
Ho fatto come dici, ora l'applicazione quando parte da sempre la "noiosa schermata nera" ma anche un "bellissimo" progressDialog/toast (li ho provati entrambi e devo decidere quale inserire).
ma ora non mi viene piu` visualizzato lo Splash Screen.. credo che il passaggio da un'activity ad un'altra sia troppo veloce e quindi non mi da il tempo per visualizzarla.

ora purtroppo non ho il codice ma piu` o meno e` cosi`..

in splashscreen creo una classe privata asynctask che :

nel metodo onPreExecute fai partire la progress dialog/toast
nel metodo doInBackground fa partire l'activity main dove vengono caricati e mostrati i dati

nel metodo onCreate di splashscreen carico il layout con il testo e l'immagine da visualizzare come splashscreen e poi lancio blablabla.execute() per lanciare l'asynctask.

forse non ti è chiarissimo lo scopo delle threads(asynctask in questo caso). se  carichi i dati all'interno dell oncreate dell' "activity main"  di conseguenza non renderizza subito il layout...

i dati devi caricarli all'interno dell asynctask, nel doInBackground precisamente (non devi fai partire la tua "main activity" in doInBackground :'(... così resti sullo splash mentre carichi i dati invece che andare in una scermata nera)

poi nel metodo onPostExecute, fai partire la tua "activity main" passandogli i dati che a questo punto saranno già stati caricati.
« Ultima modifica: 09 Giugno 2010, 12:21:20 CEST da Qlimax »
Why?

Offline wariat

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc magic
  • Sistema operativo:
    Windows
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #18 il: 15 Giugno 2010, 22:26:58 CEST »
0
ho fatto come dici ma a questo punto mi va in crash l'applicazione.

questo e il LogCat
Codice: [Seleziona]
06-15 20:24:18.506: INFO/ActivityManager(64): Displayed activity com.android.globetrotter/.SplashScreen: 1590 ms (total 1590 ms)
06-15 20:24:19.936: DEBUG/dalvikvm(570): GC freed 5904 objects / 302960 bytes in 131ms
06-15 20:24:20.016: DEBUG/AndroidRuntime(570): Shutting down VM
06-15 20:24:20.016: WARN/dalvikvm(570): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
06-15 20:24:20.016: ERROR/AndroidRuntime(570): Uncaught handler: thread main exiting due to uncaught exception
06-15 20:24:20.047: ERROR/AndroidRuntime(570): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.android.globetrotter.RSSFeed)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Parcel.writeSerializable(Parcel.java:1131)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Parcel.writeValue(Parcel.java:1085)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Parcel.writeMapInternal(Parcel.java:469)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Bundle.writeToParcel(Bundle.java:1445)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Parcel.writeBundle(Parcel.java:483)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.content.Intent.writeToParcel(Intent.java:4919)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1139)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1449)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.app.Activity.startActivityForResult(Activity.java:2661)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.app.Activity.startActivity(Activity.java:2705)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at com.android.globetrotter.SplashScreen$Pollo.onPostExecute(SplashScreen.java:66)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at com.android.globetrotter.SplashScreen$Pollo.onPostExecute(SplashScreen.java:1)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.AsyncTask.finish(AsyncTask.java:416)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:428)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Looper.loop(Looper.java:123)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.app.ActivityThread.main(ActivityThread.java:4203)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.lang.reflect.Method.invokeNative(Native Method)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.lang.reflect.Method.invoke(Method.java:521)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at dalvik.system.NativeStart.main(Native Method)
06-15 20:24:20.047: ERROR/AndroidRuntime(570): Caused by: java.io.NotSerializableException: com.android.globetrotter.RSSItem
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1753)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:2073)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1900)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1863)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeNewArray(ObjectOutputStream.java:1588)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:2064)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1900)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1863)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1354)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:421)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.util.Vector.writeObject(Vector.java:1091)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.lang.reflect.Method.invokeNative(Native Method)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.lang.reflect.Method.invoke(Method.java:521)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1435)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1789)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:2073)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1900)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1863)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1354)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:421)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1456)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1789)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:2073)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1900)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1863)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     at android.os.Parcel.writeSerializable(Parcel.java:1126)
06-15 20:24:20.047: ERROR/AndroidRuntime(570):     ... 22 more

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re: Passaggio da una activity ad un'altra con AlertDialog
« Risposta #19 il: 16 Giugno 2010, 08:35:30 CEST »
0
Dagli errori sembrerebbe li steso problema che ho avuto io provando a mandate in un intent un oggetto non serializzabile

Sent from my HTC Magic using Tapatalk

Offline wariat

  • Nuovo arrivato
  • *
  • Post: 26
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc magic
  • Sistema operativo:
    Windows
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #20 il: 16 Giugno 2010, 10:11:21 CEST »
0
Allora problema RISOLTO.. io cercavo di passare una variabile tra un'activity A ad un'activity B con putExtra, ma non capisco perche` mi dava errore.

Soluzione
Ho fatto caricare i dati in doInBackground, in onPreExecute faccio apparire il toast di avviso e in onPostExecute faccio parite la nuova activity.
Ora dichiarando (nelll'activity A) publica la variabile da passare posso richiamarla in B senza fare nessun putExtra, ma solo richiamandola cosi` :
Codice: [Seleziona]
nomeActivityA.nomeVar ed il gioco e` fatto. Ho la mia bella variabile compilata in precedenza da A durante il doInBackground. Ora non ho il codice sotto mano, ma se non e` chiaro piu` tardi posso postarlo.
non sara` molto pulito e formale ma funziona egragiamente.

Risultato
Ho il mio splash screen che va via solo dopo che dati sono stati caricati, il toast mi avvisa che e` in corso il caricamento e non c'e` nessun ritardo o schermata nera che si interpone tra le due activity, risultatndo tutto piu` chiaro, bello e comprensibile.

 ;-) Ringrazio tutti quelli che mi hanno dato una mano!!!!!!!!!!!!!!

Offline pippopeppe

  • Nuovo arrivato
  • *
  • Post: 17
  • [Close The World - txeN ehT nepO]
  • Respect: 0
    • pippopeppe81
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.04
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #21 il: 26 Giugno 2010, 17:52:04 CEST »
0
Ciao ragazzi,
ho lo stesso problema tra AsyncTask e activity.
Tutte le soluzioni generiche che ho visto sono ottime se io dichiaro il mio task all'interno dell'activity, ma nel mio caso ho creare una classe apparte che viene usata da più activity in funzione della azione da compiere.
Voglio fare apparire la progressdialog durante il caricamento dei dati ma non so come instanziare la dialog dato che il new ProgressDialog() vuole un tipo Context come argomento e nella onPreExecute() non posso accedere ai parametri che passo al task al momento della chiamata ad execute()

Domanda collaterale:
Una volta che riesco a visualizzare la dialog, è possibile cambiare i messaggi  con setmessage() analogamente a come faccio per la progressbar nell'esempio che avete fatto per AsyncTask?
[Close The World - txeN ehT nepO]

Offline pippopeppe

  • Nuovo arrivato
  • *
  • Post: 17
  • [Close The World - txeN ehT nepO]
  • Respect: 0
    • pippopeppe81
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.04
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #22 il: 26 Giugno 2010, 18:04:14 CEST »
0
Ho pensato che una possibile soluzione sarebbe usare un Service, e in realtà lo sto facendo come descritto nella vostra guida sul MVC. Lo uso per compiere altre azioni, ma pensandoci potrei usarlo per tutto.

Solo che mi mancano dei passaggi base:
Come faccio ad accede da una activity ai metodi di un service che è in esecuzione e viceversa?
Come Faccio a sapere dal Service da quale Activity è stato avviato? Suppongo sia nella onCreate agendo sul parametro Intent, ma non so come..

Avevo pensato a passare un handler dall'activity al Service e viceversa per lo scambio di messaggi, ma ancora non ho capito come dato che non è serializable.
« Ultima modifica: 26 Giugno 2010, 18:08:55 CEST da pippopeppe »
[Close The World - txeN ehT nepO]

Offline pippopeppe

  • Nuovo arrivato
  • *
  • Post: 17
  • [Close The World - txeN ehT nepO]
  • Respect: 0
    • pippopeppe81
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.04
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #23 il: 26 Giugno 2010, 18:24:45 CEST »
0
Ho risolto in questo modo anche se non mi piace molto:


Creazione del task nell'activity chiamante:

Codice (Java): [Seleziona]
...
BackgroundTask task = new BackgroundTask();
task.setCallerActivity(this);
task.execute(MyParams);
...

Nell AsyncTask:
Codice (Java): [Seleziona]
....
@Override
public void onPreExecute() {
        dialog = new ProgressDialog(callerActivity);
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
}

public void setCallerActivity(Activity act) {
        this.callerActivity = act;
}
...

Inoltre nel motodo onProgressUpdate() e doInBackground() posso modificare la progressDialog inserendo titolo e messaggio.

non mi piace molto come soluzione quindi se qualcuno di voi ha una idea più elegante mi faccia sapere!
[Close The World - txeN ehT nepO]

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 719
  • Respect: +169
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Nexus One - Wildfire - Magic
  • Market Developer Name:
    egsolutions
  • Sistema operativo:
    Ubuntu 10.10, Windows 7
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #24 il: 26 Giugno 2010, 18:57:41 CEST »
0
potresti creare un costruttore che prende come parametro il context (infatti quello richiesto è il context, non l'activity -che però estende context-), o addirittura la progress dialog stessa...

cos'è esattamente che non ti piace molto?
Why?

Offline pippopeppe

  • Nuovo arrivato
  • *
  • Post: 17
  • [Close The World - txeN ehT nepO]
  • Respect: 0
    • pippopeppe81
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.04
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #25 il: 26 Giugno 2010, 19:55:25 CEST »
0
non mi piace il fatto di dover chiamare un metodo dell'asynctask prima di invocare execute.
L'idea del costruttore stava per venirmi e ti ringrazio del consiglio.

Non mi piace molto la tecnica, probabilmente per un thread generico e parametrizzabile ci sono soluzioni migliori ma dati i miei tempi stretti(E' la mia tesi di laurea) la soluzione del parametro nel costruttore mi sembra la migliore.

Grazie mille!

Comunque mi interessava sapere questo:
Citazione
Come faccio ad accede da una activity ai metodi di un service che è in esecuzione e viceversa?
Come Faccio a sapere dal Service da quale Activity è stato avviato? Suppongo sia nella onCreate agendo sul parametro Intent, ma non so come..
« Ultima modifica: 26 Giugno 2010, 20:01:11 CEST da pippopeppe »
[Close The World - txeN ehT nepO]

Offline pippopeppe

  • Nuovo arrivato
  • *
  • Post: 17
  • [Close The World - txeN ehT nepO]
  • Respect: 0
    • pippopeppe81
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    Ubuntu 10.04
Re:Passaggio da una activity ad un'altra con AlertDialog
« Risposta #26 il: 26 Giugno 2010, 21:49:16 CEST »
0
Di nuovo mi sono risposto da solo.

Per chi fosse interessato consiglio di seguire questo link:

http://redomino.com/it/labs/progetti/google-android/documentazione/materiale/progettare-e-usare-uninterfaccia-remota-usando-aidl/

Che altro non è che la traduzione in italiano della guida ufficiale su come creare interfacce AIDL.
Queste interfacce sono la versione light di COM o CORBA per Android.
Esse servono per far comunicare i processi tra di loro, per esempio una Activity e un Service.

Vi consiglio di creare un piccolo tutorial sul loro utilizzo.


Se ci arrivo magari lo potrei fare io una volta che le ho usate per benino. :-P
« Ultima modifica: 26 Giugno 2010, 21:55:11 CEST da pippopeppe »
[Close The World - txeN ehT nepO]