CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 8 su 8
Discussione:

Problema passaggio parametro tra activity

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    87

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Problema passaggio parametro tra activity

    Salve a tutti ragazzi, ho un problema con il passaggio di un parametro tra un activity e l'altra. Mi spiego meglio:

    Ho un activity, nel momento in cui premo un bottone, mi spunta un dialog, ove io inserisco un numero, nel momento in cui premo ok, avviene il passaggio da un activity e un'altra con passaggi di parametri. Essenzialmente passo due parametri, un intero e un oggetto di tipo MyDatabase. Fatto ciò l'app crasha inspiegabilmente. La cosa buffa è che se commento la riga di codice in cui dico all'app di conservare la variabile di tipo MyDatabase per poi passarla all'activity, ecco che l'app non crasha più. Vi posto il codice in questione e tutto il log, scusatemi anticipatamente, ma non riesco a trovare nel log che eclipse mi da informazioni al riguardo la riga che dà errore, infatti sono riuscito a trovare la riga che mi da errore solo per tentativi.

    Codice in questione:



    Qui il mio logcat che eclipse mi dà:

    01-27 19:45:47.190: W/dalvikvm(8486): threadid=1: thread exiting with uncaught exception (group=0x41760c80)
    01-27 19:45:47.195: E/AndroidRuntime(8486): FATAL EXCEPTION: main
    01-27 19:45:47.195: E/AndroidRuntime(8486): Process: com.ppe.twisterandroid, PID: 8486
    01-27 19:45:47.195: E/AndroidRuntime(8486): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.ppe.twisterandroid.MyDatabase)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Parcel.writeSerializable(Parcel.java:13 16)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Parcel.writeValue(Parcel.java:1264)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Parcel.writeArrayMapInternal(Parcel.jav a:618)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Bundle.writeToParcel(Bundle.java:1692)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Parcel.writeBundle(Parcel.java:636)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.content.Intent.writeToParcel(Intent.java:7 055)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.ActivityManagerProxy.startActivity(Act ivityManagerNative.java:2093)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.Instrumentation.execStartActivity(Inst rumentation.java:1419)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.Activity.startActivityForResult(Activi ty.java:3424)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.Activity.startActivityForResult(Activi ty.java:3385)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.Activity.startActivity(Activity.java:3 627)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.Activity.startActivity(Activity.java:3 595)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at com.ppe.twisterandroid.MainActivity$2$1.onClick(Ma inActivity.java:72)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at com.android.internal.app.AlertController$ButtonHan dler.handleMessage(AlertController.java:166)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Handler.dispatchMessage(Handler.java:10 2)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Looper.loop(Looper.java:136)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.app.ActivityThread.main(ActivityThread.jav a:5081)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.lang.reflect.Method.invokeNative(Native Method)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.lang.reflect.Method.invoke(Method.java:515)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at com.android.internal.os.ZygoteInit$MethodAndArgsCa ller.run(ZygoteInit.java:781)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at com.android.internal.os.ZygoteInit.main(ZygoteInit .java:597)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at dalvik.system.NativeStart.main(Native Method)
    01-27 19:45:47.195: E/AndroidRuntime(8486): Caused by: java.io.NotSerializableException: android.app.Application
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeNewObject(ObjectOu tputStream.java:1364)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObjectInternal(Obj ectOutputStream.java:1671)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:1517)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:1481)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeFieldValues(Object OutputStream.java:979)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.defaultWriteObject(Obje ctOutputStream.java:368)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeHierarchy(ObjectOu tputStream.java:1074)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeNewObject(ObjectOu tputStream.java:1404)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObjectInternal(Obj ectOutputStream.java:1671)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:1517)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:1481)
    01-27 19:45:47.195: E/AndroidRuntime(8486): at android.os.Parcel.writeSerializable(Parcel.java:13 11)
    01-27 19:45:47.195: E/AndroidRuntime(8486): ... 21 more
    ancora grazie ragazzi
    Ultima modifica di giupardeb; 27-01-14 alle 20:04

  2.  
  3. #2
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da giupardeb Visualizza il messaggio
    Salve a tutti ragazzi, ho un problema con il passaggio di un parametro tra un activity e l'altra. Mi spiego meglio:

    Ho un activity, nel momento in cui premo un bottone, mi spunta un dialog, ove io inserisco un numero, nel momento in cui premo ok, avviene il passaggio da un activity e un'altra con passaggi di parametri. Essenzialmente passo due parametri, un intero e un oggetto di tipo MyDatabase. Fatto ciò l'app crasha inspiegabilmente. La cosa buffa è che se commento la riga di codice in cui dico all'app di conservare la variabile di tipo MyDatabase per poi passarla all'activity, ecco che l'app non crasha più. Vi posto il codice in questione e tutto il log, scusatemi anticipatamente, ma non riesco a trovare nel log che eclipse mi da informazioni al riguardo la riga che dà errore, infatti sono riuscito a trovare la riga che mi da errore solo per tentativi.

    Codice in questione:



    Qui il mio logcat che eclipse mi dà:



    ancora grazie ragazzi
    NotSerializableExceptio vuol dire che la tua classe MyDatabase non implementa l'interfaccia java.io.Serializable oppure non la implementa in modo corretto.

  4. #3
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    87

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    innanzitutto grazie per la risposta, ho seguito una guida in cui diceva che per passare oggetti creati dal programmatore, bisogna fare implementare l'interfaccia Seriazable dell'oggetto da passare, e l'ho fatto.. ecco un po di codice della classe MyDatabase:

    public class MyDatabase implements Serializable {

    private static final long serialVersionUID = -7197667667965365342L;
    SQLiteDatabase mDb;
    DbHelper mDbHelper;
    Context mContext;
    ....... . . ...
    .
    .
    .
    .

  5. #4
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da giupardeb Visualizza il messaggio
    innanzitutto grazie per la risposta, ho seguito una guida in cui diceva che per passare oggetti creati dal programmatore, bisogna fare implementare l'interfaccia Seriazable dell'oggetto da passare, e l'ho fatto.. ecco un po di codice della classe MyDatabase:
    A parte che già Context non è serializzabile, per cui sicuramente andrebbe dichiarata transient.
    Ma soprattutto, che classe è? Se si tratta di una classe che gestisce un database non ha alcun senso serializzarla e passarla tra 2 Activity: si può usare direttamente!
    Sicuro di non voler passare una classe che rappresenta un oggetto ricavato dal database?
    In questo caso la classe dovrebbe rappresentare unicamente i dati di quell'oggetto e non il codice di gestione del database.

  6. #5
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    87

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da iClaude76 Visualizza il messaggio
    A parte che già Context non è serializzabile, per cui sicuramente andrebbe dichiarata transient.
    Ma soprattutto, che classe è? Se si tratta di una classe che gestisce un database non ha alcun senso serializzarla e passarla tra 2 Activity: si può usare direttamente!
    Sicuro di non voler passare una classe che rappresenta un oggetto ricavato dal database?
    In questo caso la classe dovrebbe rappresentare unicamente i dati di quell'oggetto e non il codice di gestione del database.
    GUarda il mio unico intento è quello di usare il database creato nell'activity principale ovunque nella mi applicazione, cioè devo poter interagire con esso in qualsiasi momento. Cosa m consigli di fare? e poi che significa, "A parte che già Context non è serializzabile, per cui sicuramente andrebbe dichiarata transient."?

  7. #6
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da giupardeb Visualizza il messaggio
    GUarda il mio unico intento è quello di usare il database creato nell'activity principale ovunque nella mi applicazione, cioè devo poter interagire con esso in qualsiasi momento. Cosa m consigli di fare? e poi che significa, "A parte che già Context non è serializzabile, per cui sicuramente andrebbe dichiarata transient."?
    Context rappresenta il contesto di esecuzione di una applicazione, activity, ecc.: è qualcosa di dinamico, quindi non serializzabile, come gli stream.
    Cmq nel tuo caso in genere si fa così: si crea una classe (o più classi) pubblica che gestisce il database (forse nel tuo caso si tratta di MyDatabase), la si importa nelle classi dove vuoi utilizzarla con l'istruzione import, quindi si crea un oggetto da quella classe e lo si utilizza direttamente.

  8. #7
    Androidiano


    Registrato dal
    Aug 2010
    Messaggi
    87

    Ringraziamenti
    2
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da iClaude76 Visualizza il messaggio
    Context rappresenta il contesto di esecuzione di una applicazione, activity, ecc.: è qualcosa di dinamico, quindi non serializzabile, come gli stream.
    Cmq nel tuo caso in genere si fa così: si crea una classe (o più classi) pubblica che gestisce il database (forse nel tuo caso si tratta di MyDatabase), la si importa nelle classi dove vuoi utilizzarla con l'istruzione import, quindi si crea un oggetto da quella classe e lo si utilizza direttamente.
    Ho capito.. ma una domanda stupidissima.. mettiamo il caso che io importi la classe MyDatabase nell'activity main, e li creo il database per un motivo di ordine mio personale. Se volessi utilizzare il database, creato nell'activity main, nella third_activity, importo la classe MyDatabase e poi? come faccio a usare il Db? Grazie per la pazienza

  9. #8
    Androidiano L'avatar di iClaude76


    Registrato dal
    Oct 2012
    Località
    Trento
    Messaggi
    207
    Smartphone
    Galaxy S3, Nexus 7, G. Tab 2 7

    Ringraziamenti
    1
    Ringraziato 27 volte in 25 Posts
    Predefinito

    Quote Originariamente inviato da giupardeb Visualizza il messaggio
    Ho capito.. ma una domanda stupidissima.. mettiamo il caso che io importi la classe MyDatabase nell'activity main, e li creo il database per un motivo di ordine mio personale. Se volessi utilizzare il database, creato nell'activity main, nella third_activity, importo la classe MyDatabase e poi? come faccio a usare il Db? Grazie per la pazienza
    A far bene la classe (o le classi) che gestisce il database dovrebbe gestire tutto al suo interno, in pratica al suo interno avrà un variabile di tipo SQLiteDatabase, quindi dalle varie Activity non si gestisce direttamente il database, bensì tramite la sua classe di gestione.
    Se proprio vuoi creare il database all'interno di una Activity, allora la cosa migliore è crearlo in ogni Activity che lo utilizza separatamente, ma come vedi è uno spreco inutile di codice.
    Passare il reference al SQLiteDatabase tra un Activity è l'altra è una cosa che eviterei, anche perchè quando e come lo chiudi?

  10. Il seguente Utente ha ringraziato iClaude76 per il post:

    giupardeb (02-02-14)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy