[英]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
MyNumbersClass
为MyNumbersClass
并使用getData()
检索列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.