Error de AndroidRuntime: Parcela: no se puede calcular el valor

109

Estoy tratando de pasar un HashMap a una nueva actividad usando la función intent.puExtra. Al pasar por el depurador, parece que agrega el HashMap sin problema, sin embargo, cuando se llama a startActivty (), aparece un error de tiempo de ejecución que indica que Parcel: no se puede calcular el valor com.appName.Liquor.

Liquor es una clase personalizada que creé y creo que, en combinación con un HashMap, está causando el problema. Si paso una cadena en lugar de mi HashMap, carga la siguiente actividad sin problema.

Actividad principal

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);

Clase de licor

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);
}
}

Actividad secundaria

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);

Cuando existe el error de tiempo de ejecución, nunca llega a la clase de subactividad. Así que estoy bastante seguro de que el problema existe al agregar el HashMap a la intención, y basándome en el error, creo que mi clase Liquor es la causa, pero no puedo entender por qué.

Su ayuda será muy apreciada. ¡Gracias!

Jared
fuente

Respuestas:

274

Tu HashMapmismo es serializable, pero ¿la Bottleclase es serializable? De lo contrario, no se serializará y arrojará errores en tiempo de ejecución. Hacer que la Bottleclase implemente la java.io.Serializableinterfaz

naikus
fuente
5
Gracias, tuve que agregar implementos serializables a las clases de licor y botella.
Jared
2
funciona .. Tengo que implementar Serializable en la clase Bottle. Gracias @naikus
Ashokchakravarthi Nagarajan
177
El licor siempre tiene la culpa :))
Cezar Alexandru Vancea
3
Funcionó para mí :)
Jacky
1
Funciona, pero estoy confundido, ¿qué tiene que ver la serialización con esto? ¿Android sigue serializando y deserializando objetos periódicamente? ¿Y en qué casos necesito implementar la interfaz serializable (como aquí)?
Reeshabh Ranjan