Autore Topic: Problema Intent Serializable  (Letto 3472 volte)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Problema Intent Serializable
« il: 11 Giugno 2010, 23:21:23 CEST »
0
Salve ragazzi dovrei passare un array di oggetti personali fatti da una bitmap e una stringa tramite intent, sto usando i put-get Serializable avendo avuto premura di dichiarare il mio oggetto serializzabile appunto solo che al momento di chiamare l'intent va in crash lo stesso, può essere dovuto al fatto che Bitmap non è serializzabile? E se si come risolvo?
Questi gli errori del logfile

06-11 23:12:53.249: ERROR/AndroidRuntime(2537): Uncaught handler: thread main exiting due to uncaught exception
06-11 23:12:53.269: ERROR/AndroidRuntime(2537): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = it.unina.labadam.GUI.ResultRank)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeSerializable(Parcel.java:1131)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeValue(Parcel.java:1085)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeArray(Parcel.java:519)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeValue(Parcel.java:1072)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeMapInternal(Parcel.java:469)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Bundle.writeToParcel(Bundle.java:1445)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeBundle(Parcel.java:483)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.content.Intent.writeToParcel(Intent.java:5237)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1222)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.app.Activity.startActivityForResult(Activity.java:2749)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.app.Activity.startActivity(Activity.java:2855)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at it.unina.labadam.GUI.TagPhoto$2$1.onClick(TagPhoto.java:112)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.widget.ListView.performItemClick(ListView.java:3287)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1645)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Handler.handleCallback(Handler.java:587)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Looper.loop(Looper.java:123)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.app.ActivityThread.main(ActivityThread.java:4363)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.lang.reflect.Method.invokeNative(Native Method)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.lang.reflect.Method.invoke(Method.java:521)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at dalvik.system.NativeStart.main(Native Method)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537): Caused by: java.io.NotSerializableException: android.graphics.Bitmap
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1547)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:1153)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:420)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1251)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1587)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1854)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1696)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1660)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     at android.os.Parcel.writeSerializable(Parcel.java:1126)
06-11 23:12:53.269: ERROR/AndroidRuntime(2537):     ... 25 more
06-11 23:12:53.289: INFO/Process(122): Sending signal. PID: 2537 SIG: 3
06-11 23:12:53.289: INFO/dalvikvm(2537): threadid=7: reacting to signal 3
06-11 23:12:53.289: ERROR/dalvikvm(2537): Unable to open stack trace file '/data/anr/traces.txt': Permission denied



Grazie mille a tutti ragazzi.

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:Problema Intent Serializable
« Risposta #1 il: 12 Giugno 2010, 17:40:01 CEST »
0
timido UP. O:-) Se è vietato fatemi sapere, non vorrei trasgredire le regole, lo faccio solo perchè magari perde di visibilità la richiesta di aiuto...

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Problema Intent Serializable
« Risposta #2 il: 13 Giugno 2010, 21:51:57 CEST »
0
ciao Dodo,

si il problema è proprio il fatto che la classe Bitmap da te usata non implementa Serializable...

Prova "stupidamente" a crearti una classe che estende Bitmap ed implementa Serializable e prova a vedere cosa succede. Molto probabilmente però gli sviluppatori android non hanno implementato la classe Bitmap come serializable per via del fatto che potresti occupare troppo spazio...Valuta che non sia il caso di passare il riferimento fisico alla bitmap via intent oppure far creare all'activity successiva la bitmap (passandogli in questo caso le informazioni necessarie)



 

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re: Problema Intent Serializable
« Risposta #3 il: 13 Giugno 2010, 22:29:29 CEST »
0
Avevo pensato anche io di estendere bitmap tramite classe farlocca, poi ho pensato che effettivamente posso fare il download dei risultati direttamente nell'activity dei risultati! Grazie agafi e colgo l'occasione per farti I complimenti per il tuo task manager!

Sent from my HTC Magic using Tapatalk

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Problema Intent Serializable
« Risposta #4 il: 14 Giugno 2010, 08:09:28 CEST »
0
Grazie mille ;-)

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:Problema Intent Serializable
« Risposta #5 il: 16 Giugno 2010, 11:08:44 CEST »
0
Ragazzi mi ritrovo costretto a riaprire il problema, pensavo potessi risolvere diversamente ma ora mi ritrovo a passare una classe personale che ho dichiarato serializable ma che contiene stream che non sono serializable quindi salta tutto lo stesso,  come posso fare per passare con un intent oggetti che contengono attributi non serializzabili? è davvero importante altrimenti non posso andare avanti nel programma....help!

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Problema Intent Serializable
« Risposta #6 il: 16 Giugno 2010, 11:11:49 CEST »
0
Non si può dodopeper.

Spiega qui bene cosa devi fare e vediamo di aiutarti ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema Intent Serializable
« Risposta #7 il: 16 Giugno 2010, 12:32:55 CEST »
0
Se non hai bisogno di passare questi dati ad un'applicazione diversa puoi fare a meno degli intent.
Puoi ad esempio creare una classe del genere:

Codice (Java): [Seleziona]
public class MyClasseContainer {

        private static Classe myObj = null;

        public static synchronized Classe getObj() {
                if(myObj == null)
                        throw new Exception("myObj not yet set");
                return myObj;
        }

        public static synchronized void setObj(Classe obj) {
                myObj = obj;
        }

}

Con questo codice puoi settare l'oggetto in un'activity e poi recuperarlo da un'altra.
Sicuramente è non la soluzione più pulita però non me ne vengono in mente altre..
« Ultima modifica: 16 Giugno 2010, 12:39:18 CEST da Ricky` »

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re: Problema Intent Serializable
« Risposta #8 il: 16 Giugno 2010, 14:46:38 CEST »
0
Si diciamo che ho fatto una cosa simile solo che ora devo valutare la bontà della soluzione dato che l'oggetto che dovevo passere è l'istanza di un client quindi ho necessità di tenere il riferimento alla connessione aperta. Più tardi faccio dei test e vi faccio sapere

Sent from my HTC Magic using Tapatalk

frusso

  • Visitatore
Re:Problema Intent Serializable
« Risposta #9 il: 16 Giugno 2010, 16:49:58 CEST »
0
Ciao,

per passare i dati ad un intent intendi attraverso la classe Bundle, giusto ?

Allora puoi provare a scrivere a trasformare tu in array di byte la bitmap e passarla all'intent sotto questa forma.

puoi provare a comprimere la bitmap in un ArrayDiByte e ricostruire la bitmap nell'intent chiamata.

Dai un'occhiata a Bitmap | Android Developers

usando il metodo   compress  e successivamente il metodo BitmapFactory.decodeStream()





Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:Problema Intent Serializable
« Risposta #10 il: 16 Giugno 2010, 17:10:09 CEST »
0
No il problema non è  passare la bitmap che passo già come array di byte ma piuttosto un oggetto che ha come attributi delle bitmap e in quel caso non posso serializzare!

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:Problema Intent Serializable
« Risposta #11 il: 16 Giugno 2010, 18:53:37 CEST »
0
e se invece di un attributo bitmap usi un attributo array di byte?

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re:Problema Intent Serializable
« Risposta #12 il: 16 Giugno 2010, 19:11:08 CEST »
0
potrebbe essere una soluzione però mi toccherebbe cambiare un sacco di cose, è da valutare come ultima ipotesi se il metodo che ho adottato ora va male.
 Praticamente istanzio un oggetto client di tipo Client( una classe fatta ad hoc da noi) in una activity e lo dichiaro statico e pubblico, poi dall'altra activity accedo a questo client in modo statico, da notare che la prima activity precede sempre questa seconda. Per essere sicuri di non fare casini provando a istanziare + connessioni creo una variabile booleana di controllo che diventa true una volta che istanzio il client mentre è inizializzata a false, faccio il controllo che se la variabile è false allora apro la connessione, altrimenti no, nel caso in cui sia già aperta la connessione però posso accedere ai metodi del server tranquillamente.
Secondo voi è un modo corretto di procedere? Dovrei fare qualche test in ogni caso.

Offline Agafi

  • Utente normale
  • ***
  • Post: 173
  • Respect: +10
    • svetlana-tomasevschi-perini
    • agafist
    • Mostra profilo
  • Dispositivo Android:
    SE Xperia Neo,LG Optimus One,Asus EEE Pad Transformer,HTC Magic Vodafone
  • Play Store ID:
    Agafi
  • Sistema operativo:
    Win7
Re:Problema Intent Serializable
« Risposta #13 il: 17 Giugno 2010, 13:17:02 CEST »
0
Nel caso in cui l'utente metta in secondo piano l'applicazione premendo il tasto Home la classe così creata non la riprendi e quindi ripartiresti dalla prima pagina?

Offline dodopepper

  • Utente junior
  • **
  • Post: 124
  • Respect: +4
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32a black
Re: Problema Intent Serializable
« Risposta #14 il: 17 Giugno 2010, 13:51:46 CEST »
0
Mmmm non ho capito bene cosa intendi....l'utente apre la connessione al server dopo aver scattato la foto o dopo averla scelta, poi da li inizia a mandare le richieste di disambigua e poi di analisi, poi una volta conclusa la ricerca avevo pensato di chiudere la connessione e abbassare il flag in modo che nel caso voglia fare una nuova ricerca venga aperta una nuova connessione.

Sent from my HTC Magic using Tapatalk