2010-08-20 61 views
4

我已经开始为android编写一个小应用程序。它看起来非常好,但有一件事我不明白。如何将一个向量插入intent.extra?

我创建了一个的活动时,一个新的意图,我添加了一个串行化向量intent.putExtra("key", vector)。在被叫活动B我这样做:Vector<ItemModel> items = (Vector<ItemModel>) getIntent().getExtras().getSerializable("key")。此行导致ClassCastException。有谁知道为什么?请帮我:-)

这里是两个活动的源和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

它没有为我工作,因为我使用列表太糟糕了任何建议..最初我做了第二个活动的Web服务请求 – shareef 2012-12-02 19:54:15

回答

0

有点困惑......但是确定你不需要Vector<ItemModel>而不是Vector为你的班级施放?

哪种类型返回getIntent().getExtras().getSerializable("key")

+0

谢谢你_very_快速回复:-)。你是对的与载体,这只是我的文章中的错误(如你可以在列表中看到的) 我已经问过android哪个类被返回并且android告诉我“ArrayList”。那么,我没有想到这个......但它与ArrayList正常工作。 非常感谢您的快速回答:-) – user426264 2010-08-20 11:53:20

0

这给一试:更换

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

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

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

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

将v1和items声明为List对象应该足够了,如果对Vector类有一些奇怪的问题,那么对ÁrrayList的更改就会显示出来。

按照文档我认为没有理由为什么它不应该与Vector类工作过。也许,偶然地,你导入了不同的Vector类,所以如果所有的类只导入java.lang.Vector,你可以仔细检查你的导入语句。

5

任何实现List和Serializable的东西在内部都会变成一个ArrayList。所以它可能以一个Vector的形式出现,但它以ArrayList的形式出现。最好在推杆和吸气球的两端把它看作是一个名单<>。

作为一般规则,请勿使用Vector。所有的方法都是同步的,这使得它比ArrayList效率低。