我一直在与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: WARN / System.err的(1490): java.io.FileNotFoundException:没有 提供商支持的文件 内容:// myproviderauthority /播客/ 1
我需要做什么?我阅读了Android documentation,但它们非常模糊:
将数据公开的字段 客户实际上应该包含一个 content:URI字符串。
1)字段类型是否需要为TEXT或是否有特殊的content: URI string
数据类型?
2)在插入时我没有URI。我是否需要在插入后获取URI,然后更新记录中的该字段?
记录还应该有另一个记录 字段,名为“_data”,列出了 设备上的确切文件路径 文件。该字段无意 由客户阅读,但由 ContentResolver的。
3)那么该字段的类型应该是什么?文字 - 我假设?
客户将致电 ContentResolver.openInputStream()on 持有URI的面向用户的字段 对于该项目。
4)这完全是垃圾!如何在现场调用ContentResolver.openInputStream()
?你只能在记录上调用它并传递Uri。
感谢您的时间,我希望您能帮助我。我还审核了这些问题(this和this),但他们没有帮助。
顺便提一下,我正在构建API(版本1.6)的第4级。
答案 0 :(得分:3)
要查看“供应商不支持文件的位置”来自何处,请查看here。那里的情况与你所描述的情况非常相似。
简而言之,您的内容提供程序(或其某些超类)需要覆盖并实现openFile
方法。默认情况下“未实现 - 退出!”会引发该错误。 ContentProvider.java
中的代码。
当我遇到困难时,我发现查看框架的底层源代码很有帮助,因为文档有时候有点缺乏。