回答
可以使用内容提供者的文件方法(如 openTypedAssetFile())将数据存储在文件中。这将返回一个AssetFileDescriptor(即跨进程的有效文件句柄)而不是Cursor。
总的来说,这个问题很难回答。内容提供者是数据存储库和客户端之间的“接口”。除了SQLite以外,这些文档没有多说关于存储库的内容,因为a)内容提供者模型是沿着关系数据库的行组织的,b)每个内容提供者的实现都会有所不同。
在知道确切的要求之前,我毫不犹豫地给出了更多建议。这可能是你可以从SQLite中受益,尽管你可能不会立即明白为什么。你也可能是正确的:SQLite不是解决方案,但给了更多的信息,我可以提出一些想法。
我明白你的意思了。另外,似乎ContentProvider的一些功能需要数据库。我一直在试图找到实现query()函数的方法,但是因为它必须返回一个Cursor对象,所以在这种情况下,我猜SQLite是必须的。 – drum 2012-03-16 18:31:20
查找[this](https://android.googlesource.com/platform/packages/providers/WebSearchProvider/+/8637dd8dc1b255052b2615430bfb4603fa8711f7/src/com/android/websearch/SuggestionProvider.java)不使用SQLIte。源数据是JSONArray。我们可以学习如何创建一个Cursor extend AbstractCursor。 – Yeung 2014-04-04 04:23:42
那么我知道你正在尝试做什么可能会创建图像,电影,或与内部存储。
您可以使用InternalStorage来存储数据字节。如果你有个字节,你可以这样做:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
把它弄出来:
File file = ...
OutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(file));
...
finally {
if (out != null) {
out.close();
}
}
是的,我已经看到此页面。但是,这在内容提供商中不起作用。 – drum 2012-03-21 22:23:47
在Android SDK示例中有一个名为FileProvider.java的示例,它使用ContentProvider而不是SQLite数据库。
- 1. 内容提供者和内容观察者示例?
- 2. 内容提供者x正常Sqlite
- 3. android内容提供者的使用者
- 4. 内容提供者
- 5. 内容提供者不与SqliteDatabase同步
- 6. 内容提供者无法删除SQLite中的行
- 7. 内容提供者和sqlite数据库,uri语法
- 8. 内容提供者和内容观察者同步
- 9. 默认启动内容提供者Android
- 10. 意图vs内容提供者在android
- 11. Android - 内容提供者查询光标
- 12. 内容提供者更新所有行
- 13. android自定义内容提供者
- 14. android内容提供者权限
- 15. 内容提供者资源$ NotFoundException
- 16. eclipse中的树内容提供者
- 17. 内容提供者未知uri
- 18. 动态注册内容提供者
- 19. 多个表格的内容提供者
- 20. 内容提供者抛出异常
- 21. Android。内容提供者或数据库?
- 22. 无法获得内容提供者
- 23. 使用直接数据库访问而不是内容提供者的android应用程序的示例?
- 24. 如何预先实例化我的内容提供者?
- 25. 消费者和提供商的LTI兼容示例
- 26. 如果db的内容提供者调用REST内容提供者,如果db没有信息
- 27. Android的内容提供者由Kotlin提供
- 28. 如何使内容提供者数据可用于android
- 29. 使用内容提供者从数据库加载数据
- 30. 如何使用内容提供者添加限制条款
请定义“使用内部存储的内容提供者”的含义,考虑到SQLite通常使用内部存储,但您不需要SQLite。 – CommonsWare 2012-03-15 17:08:07
@CommonsWare根据Android开发页面,有5种存储数据的方式:共享首选项,内部存储,外部存储,SQLite数据库和网络连接。我希望我的内容提供商使用内部存储选项。 – drum 2012-03-15 17:13:45
上下文中的内部存储意味着将东西存储在应用程序私有数据区域的文件中。这不是一个真正的API。鉴于SQLite数据库是作为文件存储在应用程序的私有数据区域中的,因此您必须做一些非常专业的事情才能使其值得费心---使用SQLite通常更容易(也更快)。 – 2012-03-15 17:16:09