2013-07-18 3 views
1

한 활동에서 다른 활동으로 완전한 arraylist를 전달하려고합니다.한 활동에서 다른 활동으로 arraylist를 전달하십시오.

내가 이런 식으로 같은 시도 ..

arraylist=new ArrayList<HashMap<String,Object>>(); 


    Intent i= new Intent(ListActivity.this,search.class); 
       i.putExtra("arraylist", arraylist); 
       startActivity(i); 

누군가는 @thanks

+0

어떤 오류가 발생합니까? hashmap의 값으로 Object를 전달하는 이유는 무엇입니까? 개체가 직렬화 할 수 없습니다. 원본 코드를 게시하십시오 – Blackbelt

+0

@blackbelt 나는 빈 배열을 받고 있습니다! –

+0

원본 코드를 게시 – Blackbelt

답변

1

자바의 Object 클래스가 직렬화 가능하지 않기 때문에이 작동하지 않습니다 나를 도울 수 없습니다. 이유에 대한 설명은 this question을 참조하십시오.

Intent.putExtra() 메서드에는 serializable 인터페이스를 구현하는 형식이 필요합니다. Object는이를 구현하지 않으므로 결과적으로 작동하지 않습니다. HashMap<String,Object>을 사용하는 대신 Serializable 인터페이스를 구현하는 특정 유형으로 오브젝트를 대체하는 것이 좋습니다. 이를 수행하는 방법은 tutorial을 참조하십시오.

당신이 전달하는 데이터가 큰 경우

업데이트는 직렬화 및 역 직렬화와 관련된 상당히 많은 오버 헤드가있을 수 있습니다. 따라서 arraylist를 저장하기 위해 Static Singleton 클래스를 사용하는 것이 좋습니다. 아래의 코드 샘플은 당신이 구현할 수있는 방법을 보여줍니다 여기에 참고로

public class DataStore { 
    private static final DataStore instance = new DataStore(); 
    private arraylist = new ArrayList<HashMap<String,Object>>(); 

    //Private constructor 
    private DataStore() {} 

    //Class is only accessible through this method 
    public static Singleton getInstance() { 
     return instance; 
    } 

    //Accessors for your data 
    private ArrayList<HashMap<String,Object>> getArrayList() 
    { 
     return arraylist; 
    } 

    private void setArrayList(ArrayList<HashMap<String,Object>> value) 
    { 
     arraylist = value; 
    } 
} 

정적 싱글에 tutorial이다.

+0

+1 감사합니다. 데이터를 가져 오는 중입니다. –

+0

싱글 톤 또는 정적 필드가 동일한 프로세스에서 공유 데이터를 저장하는 가장 좋은 방법입니다. 활동이 다른 프로세스에서 살아 있다면, 메시 전달 만이 유일한 합리적인 방법이며 데이터를 마샬링해야합니다. –

관련 문제