Я боролся с проблемой в моем приложении для Android. Я читал документацию по Android, свою книгу по Android (Andriod Pro 2) и просматривал почти каждый пример, который мог достать, но не мог понять, как реализовать хранение файлов (изображений, двоичных данных). ) против записей в таблице Sqlite, предоставленной поставщиком контента .
Вот что я сделал (почти аналогично образцу приложения Notepad):
ContentProvider
. Все это работает для операций CRUD. Внутри он использует реализацию SQLiteOpenHelper
(довольно стандартный материал) _data
типа текста Это в точности соответствует книге Android Pro 2. Вот фрагмент этой части кода:
Uri uri = getContentResolver().insert(MyAuthority.CONTENT_URI, contentValues);
OutputStream s = getContentResolver().openOutputStream(uri);
Но я получаю сообщение об ошибке ниже:
11- 29 01: 07: 30.717: ПРЕДУПРЕЖДЕНИЕ / System.err (1490): java.io.FileNotFoundException: Нет файлы, поддерживаемые провайдером на content: // 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 ( this и this ), и они не помогли.
Между прочим, я использую API уровня 4 (версия 1.6).