Я столкнулся с проблемой в моем приложении для Android.Я читал документацию по Android, мою книгу по Android (Andriod Pro 2) и посмотрел почти каждый пример, который мог достать, но не мог понять, как реализовать хранение файлов (изображений, двоичных данных)) против записей в таблице Sqlite, предоставляемых поставщиком контента .
Вот что я сделал (почти аналогично образцу приложения Notepad):
- Реализовано
ContentProvider
вмой провайдер.Все это работает для операций CRUD.Внутренне он использует реализацию SQLiteOpenHelper
(довольно стандартные вещи) - Я добавил
_data
столбец типа text - Я вставляю запись и получаю Uri обратно
- Вызовите openOutputStream для провайдера контента и начните записывать данные
Это в точности соответствует книге Android Pro 2. Вот фрагмент этой части кода:
Uri uri = getContentResolver().insert(MyAuthority.CONTENT_URI, contentValues);
OutputStream s = getContentResolver().openOutputStream(uri);
Но я получаю сообщение об ошибке ниже:
11-29 01: 07: 30.717: WARN / System.err (1490): java.io.FileNotFoundException: нет файлов, поддерживаемых провайдером в содержании: // myproviderauthority / podcasts / 1
Что мне нужно сделать?Я читаю Android документацию , но они очень расплывчаты:
поле, предоставляющее данные клиентам, должно содержать строку content: URI.
1) Так должен ли тип поля быть TEXT или существует специальный тип данных content: URI string
?
2) На момент вставки у меня нетURI.Нужно ли получать URI после вставки и затем обновлять это поле в записи?
В записи также должно быть другое поле с именем "_data", в котором указан точный путь к файлу наустройство для этого файла.Это поле предназначено не для чтения клиентом, а ContentResolver.
3) Так каким должен быть тип этого поля?ТЕКСТ - Я полагаю?
Клиент вызовет ContentResolver.openInputStream () в пользовательском поле, содержащем URI для элемента.
4) Это полная чушь!Как я могу позвонить ContentResolver.openInputStream()
на поле ??Вы можете назвать это только в протоколе и передать Uri.
Спасибо за ваше время, и я надеюсь, что вы сможете мне помочь.Я также рассмотрел эти вопросы SO ( это и это ), и они не помогли.
Кстати, я строю против уровня 4API (версия 1.6).