我已经开始为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>();
}
答案 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
,您可以仔细检查导入语句。