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 帐户的所有数据行的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby 和 GraphQL - 如何在查询中过滤数组

如何从 sqlite DB 中列出表名——Android [重复]

如何在 Google BigQuery 中列出与特定名称匹配的表?

oracle如何列出特定存储过程中使用的所有表

如何在 Android 的 LISTVIEW 中为每个原​​始图像添加不同的图像?

如何从数据库中删除属于特定类别的 woocommerce 产品