如何将Vector放入intent.extra?

use*_*264 4 java serialization android 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;

}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

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>();
}
Run Code Online (Sandbox Code Playgroud)

loc*_*cka 5

任何实现List和Serializable的东西都在内部变成了ArrayList.因此它可以作为Vector进入,但它作为ArrayList出现.最好将其视为推杆和吸气器两端的List <>.

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