2015-06-08 11 views
6

Nella mia app passaggio un oggetto dati da uno Activity a un altro. Il codice è molto semplice, il primo Activity:Eccezione per la serializzazione su Samsung Galaxy S5

Intent intent = new Intent(getActivity(), BlablaActivity.class); 
    intent.putExtra(Values.KEY_ITEM, item); 

e sul ricevente Activity:

Intent intent = getActivity().getIntent(); 
    item = (Item) intent.getSerializableExtra(Values.KEY_ITEM); 

La classe Advertising è molto semplice troppo:

public class Advertising implements Serializable { 

    private static final long serialVersionUID = -7292860618498106953L; 

    private Content content; 
    private Anchor anchor; 
    private String target; 
    private String id; 

// ... 

} 

E la classe Anchor che sembra causare questo problema:

public class Anchor implements Serializable { 

    private static final long serialVersionUID = 7360857799761417956L; 

    public String value; 
    public String label; 

// ... 

} 

ottengo la seguente eccezione solo per il Samsung Galaxy S5 (SM-g900f):

Causato da: java.lang.IllegalArgumentException: campo de.mycompany.model.Advertising.anchor
ha tipo de .mycompany.model.resultandexpose.Anchor, ha de.mycompany.model.resultandexpose.Anchor

e non riesco a dare un senso a questo, la classe atteso è la classe reale. Questo sembra essere ancora un altro problema specifico di Samsung. Qualcuno ha provato questo e conosce una correzione o ha un'idea di quale sia la causa?

EDIT:

  1. Sì, sto usando Proguard. Il file proguard è simile al seguente:

    -keepattributes ** -keep class! Android.support.v7.internal.view.menu. , {*;} -dontpreverify -dontoptimize -dontshrink -dontwarn **

La seconda linea è una soluzione per un known bug on Samsung devices e non deve toccare tutte le classi ad eccezione di quelli nel pacchetto android.support.v7.internal.view.menu.* .

  • La serialVersionUID della classe Anchor è unica in tutte le mie classi.

  • Passare a Parcelable significherebbe una massiccia revisione dell'intero progetto. Il passaggio di oggetti come Serializabledovrebbe funzionare su tutti i dispositivi.

  • La classe Anchor è solo un esempio di questo errore che si verifica in molte altre classi che sembrano sostanzialmente uguali o molto simili. Quindi non è che una classe, ma sembra essere un problema più generale.

+0

Che cosa significa "Contenuto"? È 'Serializable'? A proposito, se non si sta scrivendo l'oggetto su file, passare a 'Parcelable'. – Blackbelt

+0

@Blackbelt Content è praticamente analogo a Anchor e sì, implementa Serializable. – FWeigl

+0

Does 'serialVersionUID' è univoco per' Anchor'? Potrebbe essere che 'Content' usi lo stesso' serialVersionUID'? –

risposta

1

Ho avuto un problema simile al tuo e ho trovato che con l'aggiornamento di lolipop su dispositivi galaxy s5 samsung utilizza un'implementazione multidex. Puoi controllare il mio question qui spiegando il problema. Qualcuno ha risposto alla mia domanda ma non ho controllato se funziona ancora. Forse questo ti aiuterà.

+0

Grazie, anche se questo non risolve il problema ma almeno so di non essere solo :) "Vai all'inferno Samsung" per non fare nemmeno uno sforzo per spiegare la situazione. Indovino Devo dire ai nostri utenti che hanno comprato un dispositivo sh *** y. – FWeigl

1

Si dovrebbe cercare Parcelable per passare l'oggetto tra due attività con l'intento.

Puoi guardare this tutorial che spiega come funziona, consiglio anche di dare un'occhiata al Doc Android.

Problemi correlati