2017-03-12 3 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受け入れ配列文字列型データ.. like画像配列のようなものです。この目的のためだけにBLOBを使用しました。 – Saveen

答えて

0

BundleオブジェクトがParcel秒をサポートしていますが、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 order。

キー/値構造体を使用する場合は、独自のヘルパー関数を実装する必要があります。独自のヘルパー関数を実装する必要があります。独自のヘルパー関数は、別々のキー文字列を前面に置き、任意の数のキー/値ペアをマップに読み込みます。 あるいは、所望の要素(このクラスは、あなたのアプリケーションの将来のバージョンで互換性のままということに注意してください)が含まれ、独自の直列化可能なオブジェクトを作成します。

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); 
} 
関連する問題