Passing binären Blobs durch einen Inhaltsanbieter
Ich habe einen Content-Provider, der für meine Android-Anwendungen angepasst ist, und eines der Dinge, die verfügbar gemacht werden müssen, ist ein kleines Array von 20 bis 30 KByte. Die URI für diese Blobs sieht wie folgt aus:
content://my.authority/blob/#
wo#
ist die Zeilennummer; der resultierende Cursor hat den Standard_id
-Spalte und eine Datenspalte. Ich benutze einMatrixCursor
im @ des Anbietequery()
Methode
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
päter, in der Anwendung, die die Daten verbraucht, mache ich:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
Die Daten enthalten jedoch nicht den Inhalt meines ursprünglichen Bytearrays. vielmehr enthält es so etwas wie[B@435cc518
, das eher der Adresse des Arrays als dem Inhalt entspricht. Ich habe versucht, das Byte-Array in eine Implementierung von @ zu packejava.sql.Blob
, da das Content-Provider-Subsystem so geschrieben wurde, dass es mit SQLite einfach zu bedienen ist, aber es hat nicht geholfen.
Hat jemand das zur Arbeit bekommen? Wenn sich die Daten im Dateisystem befanden, gibt es Methoden inContentProvider
dass ich verwenden könnte, um ein Marshalled bereitzustellenInputStream
an den Client, aber die Daten, die ich versuche, Leben als Ressource in der APK des Inhaltsanbieters zurückzusenden.