如何将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语句。