AndroidRuntime-Fehler: Paket: Wert kann nicht gemarshallt werden

108

Ich versuche, eine HashMap mit der Funktion intent.puExtra an eine neue Aktivität zu übergeben. Beim Durchlaufen des Debuggers scheint die HashMap kein Problem hinzuzufügen. Wenn jedoch startActivty () aufgerufen wird, wird ein Laufzeitfehler angezeigt, der besagt, dass Parcel den Wert com.appName.Liquor nicht marshallen kann.

Liquor ist eine benutzerdefinierte Klasse, die ich erstellt habe, und ich glaube, dass sie in Kombination mit einer HashMap das Problem verursacht. Wenn ich anstelle meiner HashMap eine Zeichenfolge übergebe, wird die nächste Aktivität problemlos geladen.

Hauptaktivität

lv.setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {

      String cat = ((TextView) view).getText().toString();
      Intent i = new Intent(OhioLiquor.this, Category.class);
      i.putExtra("com.appName.cat", _liquorBase.GetMap());
      startActivity(i);

Alkoholklasse

public class Liquor
{
public String name;
public int code;
public String category;

private HashMap<String, Bottle> _bottles;

public Liquor()
{
    _bottles = new HashMap<String, Bottle>();
}

public void AddBottle(Bottle aBottle)
{
    _bottles.put(aBottle.size, aBottle);
}
}

Unteraktivität

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    HashMap<Integer, Liquor> map = (HashMap<Integer, Liquor>)getIntent().getSerializableExtra("com.appName.cat");

    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, GetNames(map)));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

Wenn der Laufzeitfehler vorliegt, wird er nie in die Unteraktivitätsklasse aufgenommen. Ich bin mir ziemlich sicher, dass das Problem beim Hinzufügen der HashMap zur Absicht besteht, und basierend auf dem Fehler glaube ich, dass meine Liquor-Klasse die Ursache ist, aber ich kann nicht herausfinden, warum.

Ihre Hilfe wird sehr geschätzt. Vielen Dank!

Jared
quelle

Antworten:

274

Ihre HashMapselbst ist serialisierbar, aber ist die BottleKlasse serialisierbar? Wenn nicht, wird es nicht serialisiert und zur Laufzeit werden Fehler ausgegeben. Lassen Sie die BottleKlasse die java.io.SerializableSchnittstelle implementieren

Naikus
quelle
5
Vielen Dank, ich musste sowohl der Liquor- als auch der Bottle-Klasse Serializable-Geräte hinzufügen.
Jared
2
es funktioniert .. Ich muss Serializable in Bottle Klasse implementieren. Danke @naikus
Ashokchakravarthi Nagarajan
177
Alkohol ist immer schuld :))
Cezar Alexandru Vancea
3
Arbeitete für mich :)
Jacky
1
Es funktioniert, aber ich bin verwirrt, was Serialisierung damit zu tun hat. Serialisiert und deserialisiert Android regelmäßig Objekte? Und in welchen Fällen muss ich die serialisierbare Schnittstelle implementieren (wie hier)?
Reeshabh Ranjan