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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage