gpt4 book ai didi

android - 如何通过 CursorLoader 使用 ContentProvider 的 insert() 方法将值正确地插入到 SQLite 数据库中?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:36 25 4
gpt4 key购买 nike

我正在阅读文档,但我仍然不太确定。它说要使用 getContentResolver(),但实际上并没有使用 CursorLoader。那么有没有办法通过CursorLoader来实现呢?我知道如何使用 query() 来完成。步骤是不是很相似?即使只是一个准确解释这一点的链接也会有所帮助。

请注意,不要将我链接到 Google 文档,因为他们没有使用 CursorLoader 从 ContentProvider 使用 insert() 方法的示例。

提前致谢!

编辑:我应该提一下我对此感到困惑的原因是因为调用新的 CursorLoader 会自动调用 ContentProviders query() 方法.但是我怎样才能为插入做同样的事情呢?

最佳答案

查看我的 blog post关于主题:

Content Resolvers and Content Providers


CursorLoader 与它无关。

插入是一个完全不同的概念...它与 CursorLoader 完全没有关系。当与 LoaderManager 结合使用时,CursorLoader 会自动查询您的数据库并在 ContentObserver 收到数据存储更改通知时自行更新。它与将数据插入数据库的实际过程无关。

如何解析对 ContentResolver 的请求

当您通过内容提供商将数据插入(或查询、更新或删除)到您的数据库中时,您不会直接与提供商通信。相反,您使用 ContentResolver 对象与提供者通信(请注意,ContentResolver 是应用程序全局 Context 中的私有(private)实例变量)。更具体地说,执行的步骤顺序是:

  1. 您调用 getContentResolver().insert(Uri, ContentValues);

  2. ContentResolver对象决定了Uri的权限。

  3. ContentResolver 将请求转发给注册了权限的内容提供者(这就是为什么您需要在 AndroidManifest.xml 中指定权限)。

  4. 内容提供者接收请求并执行指定的操作(在本例中为insert)。数据插入的方式和位置取决于您如何实现insert方法(ContentProvider是一个抽象类,需要用户实现insert查询删除更新getType)。

希望您至少能够理解这一点。之所以涉及这么多步骤,是因为 Android (1) 允许应用程序拥有多个内容提供者,以及 (2) 需要确保应用程序可以安全地与其他第三方应用程序共享数据。 (这不是因为它想混淆你,我保证)。

通过ContentProvider

插入数据

现在您(希望)对 ContentResolver 如何将这些请求转发给内容提供者有了更好的了解,插入数据就相当简单了:

  1. 首先,决定您希望内容提供商匹配哪个 uri。这取决于您决定如何将您的 uri 与 UriMatcher 匹配。您拥有的每个 uri 代表一种将数据插入内部数据库的不同方式(即,如果您的应用有两个表,您可能会有两个 uri,每个表一个)。

  2. 创建一个新的 ContentValues 对象并使用它来打包您希望发送给内容提供者的数据。 ContentValues 对象将列名称映射到数据值。在下面的示例中,列名是“column_1”,在该列下插入的值是“value_1”:

    ContentValues values = new ContentValues();
    values.put("column_1", "value_1");
  3. 一旦收到,内容提供者将(在您的情况下)将 values 对象传递给您的 SQLiteDatabase(通过 SQLiteDatabase.insert(String表,字符串 nullColumnHack,ContentValues 值) 方法)。与 ContentProvider 不同,此方法是为您实现的... SQLiteDatabase 知道如何处理 values 对象并将行插入到数据库,返回插入行的行id,如果插入失败则返回-1

...这就是您将数据插入数据库的方式。


长话短说

使用 getContentResolver().insert(Uri, ContentValues);

关于android - 如何通过 CursorLoader 使用 ContentProvider 的 insert() 方法将值正确地插入到 SQLite 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11131058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com