Android:如何在一个查询中列出属于特定 RawContacts 帐户的所有数据行
Posted
技术标签:
【中文标题】Android:如何在一个查询中列出属于特定 RawContacts 帐户的所有数据行【英文标题】:Android: How to list all data rows belonging to a specific RawContacts account in one query 【发布时间】:2014-05-03 07:33:43 【问题描述】:我正在在android中创建联系人应用程序,我将联系人添加到特定帐户。如何在一个查询中为属于此帐户的所有Rawontacts选择所有数据行? 我知道我可以先选择属于该帐户的所有 RawContacts,然后 foreach _ID 我可以选择所有数据条目。但首先这真的很慢,但最重要的是我想为所有这些 Data 行获取一个游标,以便我可以将此游标提供给 CursorAdapter。
Cursor rawCursor = context.getContentResolver().query(
RawContacts.CONTENT_URI,
new String[]
RawContacts.CONTACT_ID,
RawContacts._ID,
,
RawContacts.ACCOUNT_TYPE + " = ? AND " + RawContacts.ACCOUNT_NAME + " = ? ",
new String[] account_type, account_name,
null);
while (rawCursor.moveToNext())
long rawContactID = rawCursor.getLong(rawCursor.getColumnIndex(RawContacts._ID));
Cursor dataCursor = mContext.getContentResolver().query(
Data.CONTENT_URI,
new String[]
Data._ID,
Data.MIMETYPE,
Data.IS_SUPER_PRIMARY,
Data.DATA1,
Data.DATA2,
Data.DATA3,
,
Data.RAW_CONTACT_ID + " = ?",
new String[] String.valueOf(rawContactID),
null);
【问题讨论】:
我们需要查看当前的工作和代码 span> 感谢您的回复。我真的不认为我的代码会帮助回答这个问题,但基本上我想把它变成一个查询: 我确定其他人经历过这个问题。有人愿意帮忙吗? 【参考方案1】:现在我通过首先查询所有 raw_contacts 然后在选择中使用 IN 语句解决了这个问题。喜欢:
ArrayList<String> ids = new ArrayList<String>();
Cursor idCursor = getRawContactsCursor(context, new String[]RawContacts._ID, account_name);
try
while (idCursor.moveToNext())
ids.add(idCursor.getString(idCursor.getColumnIndex(RawContacts._ID)));
finally
idCursor.close();
String idSql = "?";
for (int i = 1; i < ids.size(); i++)
idSql += ",?";
String whereSQL = Data.RAW_CONTACT_ID + " IN (" + idSql + ")";
String[] whereArgs = null;
if (!TextUtils.isEmpty(mimetype))
whereSQL += " AND " + Data.MIMETYPE + " = ? ";
ids.add(mimetype);
whereArgs = ids.toArray(new String[ids.size()]);
Cursor cursor = context.getContentResolver().query(
Data.CONTENT_URI,
projection,
whereSQL,
whereArgs,
Data.RAW_CONTACT_ID);
return cursor;
我只是想知道当 raw_contacts 的数量变得足够大时会发生什么。我猜有一千个或更多 raw_contact id 会破坏一些东西。
【讨论】:
以上是关于Android:如何在一个查询中列出属于特定 RawContacts 帐户的所有数据行的主要内容,如果未能解决你的问题,请参考以下文章
如何从 sqlite DB 中列出表名——Android [重复]
如何在 Google BigQuery 中列出与特定名称匹配的表?