2010-09-29 16 views
67

Estoy intentando pasar un HashMap a una actividad nueva utilizando la función intent.puExtra. Al pasar por el depurador, parece que no agrega ningún problema al HashMap; sin embargo, cuando se llama a startActivty(), aparece un error de tiempo de ejecución que indica que Parcel: no se puede ordenar el valor com.appName.Liquor.Error de AndroidRuntime: Parcel: no se puede ordenar el valor

Liquor es una clase personalizada que he creado, 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 problemas.

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

licor Clase

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

Sub Actividad

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 ejecución nunca lo hace en la clase de actividad sub. Así que estoy bastante seguro de que existe un problema al agregar HashMap a la intención, y basado en el error, creo que mi clase de Licor es la causa, pero no puedo entender por qué.

Su ayuda será muy apreciada. ¡Gracias!

Respuesta

169

Su HashMap sí mismo es serializable pero es el Bottle clase serializable? De lo contrario, no se serializará y arrojará errores en el tiempo de ejecución. Haga que la clase Bottle implemente la interfaz java.io.Serializable

+3

Gracias, tuve que agregar implementos Serializable a las clases de Licor y Botella. – Jared

+1

funciona ... Tengo que implementar Serializable en la clase Botella. Gracias @naikus –

+103

El licor siempre tiene la culpa :)) –

Cuestiones relacionadas