ClassNotFoundException quando unmarshalling un Parcelable
-
27-10-2019 - |
Domanda
Ho un problema con l'analisi di una Parcelable attraverso una Intent.
creo Parcelable usando
Intent data = new Intent();
data.putExtra(ShoppingListAdapter.parcelName, la);
setResult(Activity.RESULT_OK, data);
lo ricevo nella onActivityResult:
Parcelable myData = data.getParcelableExtra(ShoppingListAdapter.parcelName);
Poi passare ad un'altra attività utilizzando:
Intent myIntent = new Intent(this,Class.class);
myIntent.putExtra("myData", myData);
startActivityForResult(myIntent, RESULT);
Il mio Parcelable ha un altro all'interno Parcelable quale scrivo e leggo uisng:
list = in.readParcelable(null);
Ho provato con diversi caricatori di classi, da ClassLoader.getSystemLoader () per MyClass.class.getClassLoader (), ma ancora ottengo un'eccezione di runtime:
06-12 21:13:04.940: ERROR/AndroidRuntime(29962): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling:
E 'il mio pacco danneggiato da qualche parte prima di questo o sto leggendo sbagliato?
Alex
Soluzione 2
Come è stato sottolineato che questo era un approccio errato da usare. Quindi, anche se non l'ho risolto, c'è un modo migliore di fare la stessa cosa. Quindi prendere in considerazione al posto
Come per dichiarare le variabili globali in Android?
Anche se qualcuno ha qualche idea per la risposta alla domanda iniziale si prega di inviare. Può capitare qualche altra parte per qualcun altro.
Alex
Altri suggerimenti
ho avuto quel problema troppo, è una cosa stupida. Il ordine e il numero dei metodi su writeToParcel e readToParcel dovrebbe essere lo stesso e con le stesse variabili.
I media:
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(title);
dest.writeParcelable((Parcelable)this.getLocation(), flags);
dest.writeString(value);
}
deve essere nello stesso ordine come:
private void readFromParcel(Parcel in){
this.setTitle(in.readString());
this.setLocation((Location)in.readParcelable(android.location.Location.class.getClassLoader()));
this.setValue(in.readString());
}