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:
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 comeSerializable
dovrebbe 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.
Che cosa significa "Contenuto"? È 'Serializable'? A proposito, se non si sta scrivendo l'oggetto su file, passare a 'Parcelable'. – Blackbelt
@Blackbelt Content è praticamente analogo a Anchor e sì, implementa Serializable. – FWeigl
Does 'serialVersionUID' è univoco per' Anchor'? Potrebbe essere che 'Content' usi lo stesso' serialVersionUID'? –