如何将Vector放入intent.extra?

我已经开始为android编写一个小应用程序。 它看起来很漂亮,但有一点我不明白。

我在活动A中创建了一个新的意图,我添加了一个序列化的矢量intent.putExtra("key", vector) 。 在被调用的活动B上我这样做: Vector items = (Vector) 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 v1 = new Vector(); 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 items = (Vector) extras.getSerializable("ShoppingList"); ArrayList<HashMap> itemsList = new ArrayList<HashMap>(); HashMap itemMap = new HashMap(); } 

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

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

有点困惑……但是你确定你不需要Vector代替Vector来进行你的类演员吗?

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

尝试一下:替换

 Vector v1 = new Vector(); 

 List v1 = new ArrayList(); 

 Vector items = (Vector) extras.getSerializable("ShoppingList"); 

 List items = (List) extras.getSerializable("ShoppingList"); 

将v1和项目声明为List对象应该足够了,对ÁrrayList的更改只会显示Vector类是否存在一些奇怪的问题。

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