我正在尝试减少对Android数据库的查询次数。基本上我想获得包含用户定义的搜索词的任何电子邮件或IM地址。现在我正在做两个单独的查询:
电子邮件:
Cursor emails = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.DATA + " LIKE ?",
new String[] {searchTerm},
null);
IM:
Cursor cursor = cr.query(
ContactsContract.Data.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Im.DATA + " LIKE ?",
new String[] {searchTerm},
null);
有没有人知道将这两种查询结合起来的简单方法?问题的症结似乎是两个内容URI不同。
西蒙
答案 0 :(得分:3)
您可以尝试使用MatrixCursor加入表格。
这是example。
答案 1 :(得分:1)
此解决方案更容易:不使用ContentResolver。使用SQLiteDatabase db = bdd.getReadableDatabase()
(bdd是您的SQLiteHelper)然后:
db.rawquery ("HERE YOU WRITE YOUR QUERY WITH TWO TABLES", "HERE SelectionArgs").
示例:
db.rawquery("SELECT a.*, b.id FROM TableA AS a, TableB AS b WHERE a.id=b.id", null);
或与其他打字相同:
db.rawquery("SELECT a.*, b.id FROM TableA AS a, TableB AS b WHERE a.id=?", "b.id");
我希望这会有所帮助。 ; - )
答案 2 :(得分:0)
您可以开发自己的内容提供商。您只需添加新URI并在处理时执行自定义查询。
但是,如果您使用第三方内容提供商是不可能的,因为SQLite数据库(或其他内容)是为其消费者封装的。
答案 3 :(得分:0)
我发现如果你这样做一个查询:
Cursor c = mApp.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
null,
null,
null,
ContactsContract.Data.CONTACT_ID + " ASC");
您将获得一个包含所有数据的非常大的表。然后,您需要检查mimetype列以找出该行中包含的数据类型。从中您可以提取给定联系人的所有电子邮件和即时消息。