Передача двоичного двоичного объекта через контент-провайдера
У меня есть провайдер контента, который настраивается для моего набора приложений Android, и одна из вещей, которую он должен предоставить, - это небольшой (20-30 КиБ) байтовый массив. URI для этих BLOB-объектов выглядит следующим образом:
content://my.authority/blob/#
где#
номер строки; результирующий курсор имеет стандарт_id
столбец и столбец данных. Я используюMatrixCursor
в провайдереquery()
метод:
byte[] byteData = getMyByteData();
MatrixCursor mc = new MatrixCursor(COLUMNS);
mc.addRow(new Object[] { id, byteData });
Позже, в приложении, потребляющем данные, я делаю:
Cursor c = managedQuery(uri, null, null, null, null);
c.moveToFirst();
byte[] data = c.getBlob(c.getColumnIndexOrThrow("data"));
Однако данные не содержат содержимого моего исходного байтового массива; скорее он содержит что-то вроде[B@435cc518
, который больше похож на адрес массива, чем на содержимое. Я попытался обернуть массив байтов в реализацииjava.sql.Blob
полагая, что он может искать это, поскольку подсистема поставщика контента написана так, чтобы ее было легко использовать с SQLite, но это не помогло.
Кто-нибудь получил это на работу? Если данные были в файловой системе, есть методы вContentProvider
что я мог бы использовать для обеспечения маршалаInputStream
клиенту, но данные, которые я пытаюсь отправить обратно, живут как ресурс в APK контент-провайдера.