[英]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.