2013-06-21 3 views
0

나는 Listview에 연락처의 모든 이름을 표시하는 안드로이드 애플리케이션을 개발 중이다.해시 맵의 Arraylist에 Serializable 객체

연락처 목록의 Onclick, 다른 Listview에서 해당 연락처의 해당 번호를 표시해야합니다.

여기서 문제는 모든 숫자를 묶어서 다른 액티비티를 보내고 번들을 받았지만받은 번들은 Serializable 객체입니다.

그래서 Listview에 표시하려면 해시 맵의 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"); 
    } 

답변

2

키 객체 NumberList 인, "지도" 나는 ArrayList의 인스턴스라고 생각합니다. 그러나 액티비티 ContactsPhoneNumbers에서 HashMap의 인스턴스 인 "map"키를 얻으려고합니다. 올바르지 않습니다. 나는이 방법으로 다음의 코드를 확인

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

기기 수령 활동

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

내 로그 캣 출력은이 :

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

참고 :이 당신에게 컴파일러 경고를 줄 것이다, 당신은 제네릭 형식을 캐스팅하기 때문이다. 유형이 양쪽에서 일치하는지 확인하는 한 무시하거나 억제 할 수 있습니다. 일반적으로 제네릭 형식을 캐스팅하는 것은 오류가 발생하기 쉽습니다. 당신의 ArrayList 생성자에 전달

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

는 그런 다음이 클래스의 인스턴스를 만들 : 더 나은 솔루션은 더 타입 안전 데이터를 포함하는 직렬화 클래스를 사용하는 것입니다. 반면에 SerializableMyNumbersClass으로 전송하고 getData()을 사용하여 목록을 검색합니다.

관련 문제