2013-06-21 55 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()來檢索列表。