2017-03-12 8 views
1

나는이 번들 있습니다SQLite에서 blob 열에 번들을 넣는 방법?

Bundle bundle = new Bundle(); 
bundle.putString("u", mp); // String mp 
bundle.putSerializable("m", mealplan); // String[7][6][4][5] mealplan 
save.putExtra("b", bundle); 

나는 BLOB 컬럼 안에 넣어 필요하지만 난 방법을 정확하게 알 수 없습니다.

+0

blob 허용 배열 문자열 유형 데이터 .. 이미지 배열과 유사합니다. 우리는이 목적으로 만 BLOB를 사용했습니다. – Saveen

답변

0

Bundle 객체는 Parcel S를 지원하지만, Parcel.marshall() documentation는 말한다 :

(등 네트워크를 통해, 로컬 디스크에) 당신이 가 영구 저장소의 모든 종류에 배치 할 수 없습니다합니다 여기에 검색 데이터입니다. 이를 위해서는 표준 직렬화 또는 다른 종류의 일반 직렬화 메커니즘을 사용해야합니다. Parcel 마셜 화 표현은 로컬 IPC에 대해 매우 최적화되어 있으므로 다른 플랫폼 버전에서 작성된 데이터와의 호환성을 유지하려고 시도하지 않습니다.

easist 직렬화 메커니즘은 읽을 수있는 텍스트 형식 인 JSON 일 수 있습니다. 당신이 JSONObject/JSONArray 객체의 트리 구성해야 JSON 문자열을 만들려면 당신은 바이너리 인코딩과 공간을 절약하려면

// write 
JSONObject json = new JSONObject(); 
json.put("u", mp); 
JSONArray mealplan_json = new JSONArray(); 
mealplan_json.put(...); // fill arrays recursively 
json.put("m", mealplan_json); 
String text = json.toString(); 

// read 
JSONObject json = new JSONObject(text); 
mp = json.getString("u"); 
JSONArray mealplan_json = json.getJSONArray("m"); 
... 

, 당신은 기본 유형을 지원 직렬화를 사용해야하고 제대로 java.io.Serializable를 구현하는 객체는 : 당신은 확인이 앱 쓰기의 모든 버전과 읽을 그래서

// write 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(bos); 
oos.writeObject(mp); 
oos.writeObject(mealplan); 
oos.close(); 
byte[] bytes = bos.toByteArray(); 

// read 
ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
ObjectInputStream ois = new ObjectInputStream(bis); 
mp = (String) ois.readObject(); 
mealplan = (String[][][][]) ois.readObject(); 

이 바이너리 직렬화 어떤 키 이름을 ("U", "m")에 저장하지 않음을 유의하시기 바랍니다 그 안에있는 같은 물건들. 아마 주문.

키/값 구조가 필요한 경우 앞에 별도의 키 문자열로 값을 쓰고 임의의 수의 키/값 쌍을지도로 읽는 자체 헬퍼 함수를 ​​구현해야합니다. 는 다른 방법으로, 원하는 요소를 포함 자신의 직렬화 객체를 생성 (이 클래스는 향후 앱 버전에서 호환 유지 것을 알아서) : 한 Bundle 객체가 있고 그 구조를 알 수없는 경우

class MealPlanData implements Serializable { 
    String u; 
    String[][][][] mp; 
}; 

키/값을 수동으로 처리해야합니다.

// write 
oos.writeInt(bundle.size()); 
for (String key : bundle.keySet()) { 
    Object value = bundle.get(key); 
    oos.writeObject(key); 
    oos.writeObject(value); 
} 

// read 
int size = ios.readInt(); 
Map<String, Object> map = new ArrayMap<String, Object>(); 
for (int i = 0; i < size; i++) { 
    String key = (String) ios.readObject(); 
    Object value = ios.readObject(); 
    map.put(key, value); 
}