2017-03-12 46 views
1

我有這個包:如何將一個Bundle放入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說:

您檢索這裏不得放置在任何類型的持久性存儲的數據(在本地磁盤,通過網絡等)。爲此,您應該使用標準序列化或其他類型的通用序列化機制。地塊編組表示針對本地IPC進行了高度優化,因此不會嘗試保持與在不同版本的平臺中創建的數據的兼容性。

easist序列化機制可能是JSON,它是一種可讀的文本格式。 要創建一個JSON字符串,你必須構建JSONObject/JSONArray對象樹:

// 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」),所以你必須確保你的應用程序寫入的所有版本和讀s中的相同對象ame命令。

如果你想擁有一個鍵/值結構,你必須實現你自己的幫助函數,這些函數在前面用單獨的鍵字符串編寫值,並將任意數量的鍵/值對讀入地圖。 或者,創建包含所需的元素你自己的序列化對象(和照顧這個類停留在你的應用程序的未來版本兼容):

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

如果你只有一個Bundle對象,不知道它的結構,你必須手動處理鍵/值:

// 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); 
} 
相關問題