什么是内容提供者?

3

我刚刚按照 developer.android.com 上的教程创建了同步适配器来实现“本地数据库与服务器数据库之间同步”的功能,经过了一番艰苦的尝试和错误,终于成功运行(已成功调用 onPerformSync 方法)。

现在为了创建同步功能的下一步,从我阅读的几篇文章中得知,我需要创建一个内容提供者(content provider)。我已经阅读了 https://developer.android.com/guide/topics/providers/content-provider-basics.html ,但我仍然不理解它的工作原理。

从这个链接 https://developer.android.com/guide/topics/providers/content-provider-basics.html 得到一些问题:

  1. 他们所说的表格(table)是指哪个表格?是指 SQLite 表格还是其他“表格”?

  2. content://user_dictionary/words 这是什么 URI?这是指 SQLite 存储表格的文件吗?如果是,我该如何知道我的 SQLite 存储的表格在哪里?

  3. 从我所读的(如果我理解正确),ContentProvider 就像一个仓库。它们有相同的功能吗?我已经使用 anko 创建了我的仓库 https://gist.github.com/mockiemockiz/a552a669d28a3c90c144bc1542b86a5e ,我能使用那段代码 / 转换那段代码成为 ContentProvider,并告诉同步适配器数据已更改吗?

1个回答

3
我刚刚按照developer.android.com的教程创建了同步适配器以提供“本地数据库与服务器数据库之间的同步”功能,并在经过多次尝试后成功使其工作(onPerformSync已成功调用)。
顺便说一下,SyncAdapter并不是特别受欢迎。
“表”这个词在该页面上出现了40次。我们无法知道其中哪一个与您有关,并且他们使用多种方式来使用此术语。
那是指向user_dictionary ContentProvider中的数据集合(“表”)的Uri。
这是ContentProvider的开发人员决定的。ContentProvider API没有规定数据存储的位置。它可以存储在SQLite中,也可以存储在JSON文件或其他任何地方。惯例认为,由ContentProvider公开的数据集合映射到SQLite表或视图,但这并非必需。
如果您在清单中的元素中使用了user_dictionary作为权限(请参见android:authorities),则知道它是您的ContentProvider。
这取决于您。除非您编写将ContentProvider实现与SQLite绑定的代码,否则ContentProvider与SQLite无关。
至少从我使用“存储库”的术语的角度来看,ContentProvider并不是。ContentProvider是某些数据存储机制的包装器,以允许外部方控制访问该数据。
那将相当困难。这就是为什么很少有开发人员使用SyncAdapter的原因之一。

啊,好的。除了使用SyncAdapter之外,我还有其他选择吗?Firestore?我认为我们还没有准备好迁移到使用NoSQL。 - Kakashi
1
@Kakashi:“除了使用SyncAdapter,我还有其他选择吗?”--您可以使用服务器支持的任何协议(例如REST、GraphQL)与服务器通信。您可以使用“AlarmManager”或“JobScheduler”调度工作。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接