繁体   English   中英

可序列化的对象到Hashmap的Arraylist

[英]Serializable object to Arraylist of Hashmap

我正在开发一个android应用程序,在其中我在Listview中显示联系人的所有名称。

在联系人列表视图的单击中,我需要在另一个列表视图中显示该联系人的相应号码。

这里的问题是,我捆绑了所有数字并将其发送给另一个活动,并且也收到了捆绑包,但是收到的捆绑包是Serializable对象。

因此,要在Listview中显示,我需要将其转换为Hashmap的Arraylist。 我怎样才能做到这一点?

这是代码:

发送活动:

HashMap<String, String> Numbermap = new HashMap<String, String>();

Numbermap.put("numb",number);
Numbermap.put("type",type);

NumberList.add(Numbermap);

Intent intent = new Intent (ContactNames.this,ContactsPhoneNumbers.class);

intent.putExtra("map", NumberList);


startActivity(intent);

接收活动:

    Serializable Numbermap = new HashMap<String, String>();

    //  contNum = (TextView)findViewById(R.id.ContactNumber);

    Bundle bundle = getIntent().getExtras();

    Intent intent = getIntent();

    if(bundle!=null)
    {
        Numbermap = bundle.getSerializable("map");
    }

您将意图与键“ map”(即我认为是ArrayList的实例)的对象NumberList放在一起。 但是,在您的活动ContactsPhoneNumbers ,您尝试使用键“ map”获取HashMap的实例,这是不正确的。

这是您应该做的:

ArrayList<HashMap<String, String>> numberList = null;
Bundle bundle = getIntent().getExtras();
Intent intent = getIntent();
if(bundle!=null)
{
    numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");
}

我按照以下方式检查了您的代码。

发送活动:

    HashMap<String, String> Numbermap = new HashMap<String, String>();
    ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
    Numbermap.put("numb", "1");
    Numbermap.put("type", "type");
    NumberList.add(Numbermap);
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
    intent.putExtra("map", NumberList);
    startActivity(intent);

接收活动:

ArrayList<HashMap<String, String>> NumberList = new ArrayList<HashMap<String, String>>();
        Bundle extras = getIntent().getExtras();
        NumberList = (ArrayList<HashMap<String, String>>) extras.get("map");
        System.out.println(NumberList.get(0));

我的logcat输出是:

06-21 17:14:59.729: I/System.out(1609): {numb=1, type=type}

可能会对您有帮助。

当另一个Activity接收到时,每个Serializable对象都会反序列化为相同的对象类型。 只需将其转换为ArrayList

ArrayList<HashMap<String, String>> numberList = (ArrayList<HashMap<String, String>>) bundle.getSerializable("map");

注意:这将向您发出编译器警告,因为您强制转换了泛型类型。 只要确保类型双方都匹配,就可以忽略或抑制它。 通常,转换泛型类型很容易出错。 更好的解决方案是使用包含数据的可序列化的类,这是类型安全的:

public class MyNumbersClass implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Map<String,String>> data;

    public MyNumbersClass(List<Map<String,String>> data) {
        this.data = data;
    }

    public MyNumbersClass() {
    }

    public List<Map<String,String>>> getData() {
        return data;
    }
}

然后只需创建此类的实例,即可将ArrayList传递给构造函数。 另一方面,将Serializable MyNumbersClassMyNumbersClass并使用getData()检索列表。

ArrayList 之谜<object>在 HashMap<div id="text_translate"><p> 我只是在运行下面的代码,我对结果感到惊讶。 有人可以解释一下这里发生了什么吗? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在这里做错了什么,请告诉我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object>

[英]Mystery with ArrayList<Object> in a HashMap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ArrayList 之谜<object>在 HashMap<div id="text_translate"><p> 我只是在运行下面的代码,我对结果感到惊讶。 有人可以解释一下这里发生了什么吗? My question is.. when I set a value using an object setter into a new copy of original arraylist, why is the object value in the original arrayList also getting changed?</p><p> 如果我在这里做错了什么,请告诉我。</p><pre> public class TestHashMap { public static void main(String[] args) { HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt; hmData = new HashMap&lt;String, ArrayList&lt;ResultData&gt;&gt;(); ArrayList&lt;ResultData&gt; arrData = new ArrayList&lt;ResultData&gt;(); for (int i = 0; i &lt; 10; i++) { ResultData rData = new ResultData(); rData.setDy(i + 1); arrData.add(rData); } hmData.put("test",arrData); System.out.println("Before &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); ArrayList&lt;ResultData&gt; newList = new ArrayList&lt;ResultData&gt;(); newList = hmData.get("test"); ResultData rNew = newList.get(1); rNew.setDy(1234566); System.out.println("##### &gt;&gt;&gt;&gt;&gt; "+arrData.get(1).getDy()); System.out.println("After &gt;&gt;&gt;&gt; "+hmData.get("test").get(1).getDy()); }}</pre></div></object> HashMap 不可序列化 从 hashmap 中的 arraylist 中删除 Object 过滤添加ArrayList <object> 到HashMap 如何在ArrayList中传递可序列化的对象 如何正确结合Hashmap <String, ArrayList<Object> &gt;和HashMap <String, Object> 数组列表 <HashMap<String,String> &gt;到JSON对象Java ArrayList vs HashMap - 大量的迭代和对象操作 java:存储HashMap <String, String> 在ArrayList中 <Object> 如何将对象输入到ArrayList <HashMap<String,Object> &gt;
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM