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

Abh*_*han 21 sqlite android

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

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

非常感谢 !

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

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

Com*_*are 31

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,以提醒您不应该使用/orderWithCustas作为修改数据Uri.

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

  • @CommonsWare:您能用一个例子更详细地解释选项一吗?谢谢。 (2认同)