2010-08-20 7 views
4

J'ai commencé à écrire une petite application pour Android. Ça a l'air très bien, mais il y a une chose que je ne comprends pas.Comment mettre un vecteur dans un intention.extra?

J'ai créé une nouvelle intention dans l'activité A et j'ai ajouté un vecteur sérialisé intent.putExtra("key", vector). Sur l'activité appelée B, je fais ceci: Vector<ItemModel> items = (Vector<ItemModel>) getIntent().getExtras().getSerializable("key"). Cette ligne provoque un ClassCastException. Quelqu'un sait-il pourquoi? S'il vous plaît aidez-moi :-)

est ici la source des deux activités et du 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; 

} 

ShoppingListActivity (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>(); 
} 
+0

il n'a pas fonctionné pour moi comme j'utilise la liste trop mauvaises toutes les suggestions .. initialement j'ai fait la demande de service Web sur la deuxième activité – shareef

Répondre

0

peu confus ... mais vous n'avez pas besoin de Vector<ItemModel> au lieu de Vector pour votre casting de classe?

Quel type est renvoyé par getIntent().getExtras().getSerializable("key")?

+0

Merci pour la réponse rapide _very_ :-). Vous avez raison avec Vector et c'était juste une erreur dans mon message (comme vous pouvez le voir dans les annonces) J'ai demandé à android quelle classe est retournée et android m'a dit "ArrayList". Eh bien, je ne m'attendais pas à ça ... mais ça fonctionne très bien avec ArrayList. Merci beaucoup pour la réponse très rapide :-) – user426264

0

pour cette solution: remplacer

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

avec

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

et

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

avec

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

La déclaration de v1 et d'éléments en tant qu'objets List devrait suffire, la modification en ÁrrayList montrerait simplement s'il y avait un problème étrange avec les classes Vector. Selon le document, je ne vois aucune raison pour laquelle cela ne devrait pas fonctionner avec la classe Vector. Peut-être, par chance, vous avez importé différentes classes Vector, donc vous pouvez vérifier vos instructions d'importation si toutes les classes importent java.lang.Vector seulement. Tout ce qui implémente List et Serializable est transformé en interne en une ArrayList.

5

Donc, il pourrait entrer en tant que vecteur, mais il apparaît comme une liste de tableaux. Il est probablement préférable de le traiter comme une liste aux deux extrémités du putter et du getter.

En règle générale, n'utilisez pas Vector non plus. Toutes les méthodes sont synchronisées ce qui le rend moins efficace qu'une ArrayList.

Questions connexes