如何将Vector放入intent.extra?

时间:2010-08-20 11:32:26

标签: java android serialization android-intent

我已经开始为Android编写一个小应用程序了。它看起来非常好,但有一点我不明白。

我在活动A中创建了一个新意图,我添加了一个序列化的向量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>();
}

3 个答案:

答案 0 :(得分:5)

任何实现List和Serializable的东西都在内部变成了ArrayList。因此它可以作为Vector进入,但它作为ArrayList出现。将它视为List&lt;&gt;可能更好。在推杆和吸气器的两端。

作为一般规则,也不要使用Vector。所有方法都是同步的,这使得它的效率低于ArrayList。

答案 1 :(得分:0)

有点困惑......但是你的班级演员确定你不需要Vector<ItemModel>代替Vector吗?

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

答案 2 :(得分: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和项目声明为List对象应该足够了,对ÁrrayList的更改只会显示Vector类是否存在一些奇怪的问题。

根据文档,我认为它没有理由不适用于Vector类。也许,偶然地,您导入了不同的Vector类,因此如果所有类仅导入java.lang.Vector,您可以仔细检查导入语句。