2013-06-21 52 views
0

的我正在开发一个Android应用程序,在这里我显示在ListView接触的所有名称。序列化对象的ArrayList的Hashmap

联系人列表视图中的onclick,我需要显示在列表视图另一个是联系的相应的数目。

这里的问题是,我捆绑所有的数字和发送它的另一个活动,也获得了捆绑,但收到的包是序列化对象。

所以,在ListView我需要将其转换为的Hashmap的ArrayList中dispaly。 我该怎么做?

下面是代码:

发送活动:

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"); 
    } 

回答

2

你投入的意图的关键 “地图”,对象NumberList这是我想是一个ArrayList的实例。但是在你的活动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"); 
} 
+0

我的坏。非常感谢您的帮助! – LISA

1

我在下面的方式检查你的代码。

发送活动:

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); 

Reciving活动:

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} 

可能这会帮助你。

0

由其他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投到MyNumbersClass并使用getData()来检索列表。