2010-08-20 59 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效率低。