gpt4 book ai didi

android - 当 CursorLoader 的构造函数不支持时,如何在 CursorLoader 中使用连接查询

转载 作者:IT老高 更新时间:2023-10-28 23:05:07 25 4
gpt4 key购买 nike

我有两个具有 1:n 关系的表,我正在使用内容提供程序和 cursorloader。

如何进行连接查询以使用游标加载器?我可以在内容提供程序中使用 rawSql 以某种方式破解它,但如何在游标加载器构造函数中完成它超出了我的范围。

非常感谢!

CursorLoader(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

Uri 只能指向一个表时如何查询连接

最佳答案

Uri 不指向任何表。它指向你想要指向的任何东西。

让我们假设您的两个表是 CustomerOrder。一位客户可能有很多订单。您想要执行查询以获取所有未完成的订单...但您想要加入一些您需要的与客户相关的列,例如客户的姓名。

让我们进一步假设您已经拥有 content://your.authority.goes.here/customercontent://your.authority.goes.here/order 定义为纯粹查询这些表。

你有两个选择:

  1. 在您的 /order Uri 上添加客户显示名称的连接。拥有另一个可用列可能不会破坏提供者的任何现有消费者(尽管测试总是一个好主意)。这就是 ContactsContract 所做的——它在几乎所有表的所有查询中加入一些基本列,例如联系人的姓名。

  2. 创建 content://your.authority.goes.here/orderWithCust,它执行与 /order 相同的基本查询,但包含您的联接。在这种情况下,您可以让 insert()update()delete() 抛出某种 RuntimeException,提醒您不要使用 /orderWithCust 作为 Uri 来修改数据。

最后,设计一个 ContentProvider Uri 系统类似于设计一个 REST Web 服务的 URL 系统。在这两种情况下,连接都必须在提供者/服务器端完成,因此您可能需要打破单表对一 URL 基线以提供一些有用的连接。

关于android - 当 CursorLoader 的构造函数不支持时,如何在 CursorLoader 中使用连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14090695/

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