¿Cómo poner un Vector en un intento.extra?

He empezado a escribir una pequeña aplicación para Android. Se ve muy bien, pero hay una cosa que no entiendo.

He creado una nueva intención en la actividad A y he añadido un vector serializado intent.putExtra("key", vector) . En la actividad llamada B estoy haciendo esto: Vector<ItemModel> items = (Vector<ItemModel>) getIntent().getExtras().getSerializable("key") . Esta línea provoca una ClassCastException . ¿Alguien sabe por qué? Por favor, ayúdame 🙂

Aquí está la fuente de las dos actividades y del ItemModel :

ItemModel:

 public class ItemModel implements java.io.Serializable { private static final long serialVersionUID = -1772392719565658730L; public int id; public String name; public String quantity; public int status; } 

ComprasListaActividad (A):

  public void onClickItems(final View v){ final Intent intent = new Intent(this,ItemListActivity.class); Vector<ItemModel> v1 = new Vector<ItemModel>(); ItemModel item = new ItemModel(); item.name = "Tomaten"; item.quantity = "400g"; item.id = 12; item.status = 0; v1.add(item); item = new ItemModel(); item.name = "Bohnen"; item.quantity = "150g"; item.id = 13; item.status = 0; v1.add(item); item = new ItemModel(); item.name = "Schokolade"; item.quantity = "5 Tafeln"; item.id = 17; item.status = 0; v1.add(item); intent.putExtra("ShoppingList", v1); startActivity(intent); 

ItemListActivity (B):

  public class ItemListActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.item); ListView list = (ListView) findViewById(R.id.ITEMSLIST); final Bundle extras = getIntent().getExtras(); Vector<ItemModel> items = (Vector<ItemModel>) extras.getSerializable("ShoppingList"); ArrayList<HashMap<String, Object>> itemsList = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> itemMap = new HashMap<String, Object>(); } 

3 Solutions collect form web for “¿Cómo poner un Vector en un intento.extra?”

Cualquier cosa que implementa Lista y Serializable se convierte internamente en una ArrayList. Por lo tanto, puede entrar como un vector, pero sale como un ArrayList. Probablemente es mejor tratarlo como una lista <> en ambos extremos en el putter y getter.

Como regla general, no utilice Vector tampoco. Todos los métodos están sincronizados lo que hace que sea menos eficiente que un ArrayList.

Bit confundido … pero seguro que no necesita Vector<ItemModel> lugar de Vector para su clase de yeso?

¿Qué tipo es devuelto por getIntent().getExtras().getSerializable("key") ?

Probar esto: reemplazar

 Vector<ItemModel> v1 = new Vector<ItemModel>(); 

con

 List<ItemModel> v1 = new ArrayList<ItemModel>(); 

y

 Vector<ItemModel> items = (Vector<ItemModel>) extras.getSerializable("ShoppingList"); 

con

 List<ItemModel> items = (List<ItemModel>) extras.getSerializable("ShoppingList"); 

Declarar v1 y los elementos como objetos de la lista debe ser suficiente, el cambio a ÁrrayList sólo mostraría si había algún problema extraño con las clases Vector.

De acuerdo con el doc no veo ninguna razón por la que no debería funcionar con la clase Vector también. Tal vez, por casualidad, importó diferentes clases de Vector, por lo que podría revisar sus instrucciones de importación si todas las clases importan sólo java.lang.Vector .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.