【问题标题】:How to put a Vector into an intent.extra?如何将向量放入intent.extra?
【发布时间】:2011-04-01 14:52:35
【问题描述】:

我已经开始为安卓编写一个小应用程序。看起来很不错,但是有一点我不明白。

我在活动 A 中创建了一个新意图,并添加了一个序列化向量 intent.putExtra("key", vector)。在被调用的活动 B 上,我正在这样做:Vector<ItemModel> items = (Vector<ItemModel>) getIntent().getExtras().getSerializable("key")。此行导致ClassCastException。有谁知道为什么?请帮助我:-)

这里是这两个活动和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;

}

购物清单活动(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>();
}

【问题讨论】:

  • 它对我不起作用,因为我使用 List 任何建议都太糟糕了.. 最初我在第二个活动中提出了 Web 服务请求

标签: java android serialization android-intent


【解决方案1】:

任何实现 List 和 Serializable 的东西在内部都会变成一个 ArrayList。所以它可能以 Vector 的形式进入,但以 ArrayList 的形式出现。在推杆和吸气杆的两端将其视为一个 List 可能会更好。

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

【讨论】:

    【解决方案2】:

    试试这个:替换

    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,您可以仔细检查您的导入语句。

    【讨论】:

      【解决方案3】:

      有点困惑...但确定你的班级演员不需要Vector&lt;ItemModel&gt; 而不是Vector

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

      【讨论】:

      • 感谢您非常快速回复:-)。你对 Vector 是对的,这只是我的帖子中的一个错误(正如你在清单中看到的那样)我已经问过 android 返回哪个类并且 android 告诉我“ArrayList”。好吧,我没想到会这样……但它适用于 ArrayList。非常感谢您的快速答复:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      相关资源
      最近更新 更多