2013-06-21 4 views
0

Я разрабатываю приложение для Android, где я отображаю все имена контакта в Listview.Serializable object to Arraylist of Hashmap

Onclick of contact Listview, мне нужно отобразить соответствующие номера этого контакта в другом списке.

Проблема в том, что я собрал все числа и отправил ей другую деятельность, а также получил пакет, но полученный пакет - это Serializable object.

Итак, чтобы разобраться в Listview, мне нужно преобразовать его в Arraylist of Hashmap. Как я могу это сделать?

Вот код:

Отправив активность:

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 вы пытаетесь получить с ключом «карту» экземпляр 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

My Bad. Большое спасибо за помощь! – 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

Каждый объект Serializable де-сериализуется в один и тот же тип объекта, если он получен другим Activity. Просто бросайте его 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() для извлечения списка.