【问题标题】:Pass the arraylist from one activity to another将数组列表从一个活动传递到另一个活动
【发布时间】:2013-07-17 02:34:22
【问题描述】:

我正在尝试将完整的数组列表从一个活动传递到另一个活动。

我已经尝试过这样的方式..

arraylist=new ArrayList<HashMap<String,Object>>();


    Intent i= new Intent(ListActivity.this,search.class);
               i.putExtra("arraylist", arraylist);
               startActivity(i);

有人可以帮我吗@thanks

【问题讨论】:

  • 你得到什么错误?为什么将 Object 作为哈希图的值传递?对象不可序列化。贴出原代码
  • @blackbelt 我正在接收空数组!!
  • 贴出原代码
  • @blackbelt 实际上我正在从 web 服务获取数据并尝试将完整的数组列表传递给另一个活动..
  • LogCat 中是否出现错误?

标签: android android-intent arraylist


【解决方案1】:

这将不起作用,因为 Java 中的 Object 类不可序列化。请参阅this question 了解原因。

Intent.putExtra() 方法需要一个实现可序列化接口的类型,Object 没有实现这个,因此它不会工作。我建议不要使用HashMap&lt;String,Object&gt;,而是将 Object 替换为实现 Serializable 接口的更具体的类型。请参阅此tutorial 了解如何执行此操作。

更新

如果您传递的数据很大,则与序列化和反序列化相关的开销可能相当大。因此,可能值得使用静态单例类来存储数组列表。下面的代码示例展示了如何实现这一点:

public class DataStore {
    private static final DataStore instance = new DataStore ();
    private arraylist = new ArrayList<HashMap<String,Object>>();

    //Private constructor
    private DataStore () {}

    //Class is only accessible through this method
    public static Singleton getInstance() {
        return instance;
    }

    //Accessors for your data
    private ArrayList<HashMap<String,Object>> getArrayList()
    {
         return arraylist;
    }

    private void setArrayList(ArrayList<HashMap<String,Object>> value)
    {
         arraylist = value;
    }
}

这里有一个tutorial 的静态单例供参考。

【讨论】:

  • 我同意,单例或静态字段是在同一进程中存储共享数据的最佳方式。如果您的活动存在于不同的进程中,那么消息传递是唯一合理的方式,您需要整理数据。
猜你喜欢
  • 2012-07-05
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多