簡體   English   中英

關於Android ContentResolver查詢分組依據

[英]About Android ContentResolver Query Group By

我測試sql,它在Sqlite Spy中工作正常:

select ifnull(_name, _number) as identifer, count(_id) as amount from call group by identifer

我想在ContentConsolver中使用它,但不能與“分組依據”一起使用:

String[] projections = new String[] { "ifnull(name, number) as identifer", "count(_id) as amount" };
String group = "identifer";
//String selection = ") GROUP BY (" + group;
Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, projections, null, null, null /*!group*/ );

我該怎么辦?

@ njzk2通過使用HashSet做到了這一點: Ice Cream Sandwich的ContentResolver中的Group By ,但是如果您想求和,它不適用於count()。 我認為最好的解決方案是制作CallLog數據庫的副本,然后可以使用rawQuery()或任何您想要的東西(也許這是對性能的浪費)。

private void refreshDbCache()
{
    CallDbCache dbCache = new CallDbCache(this);
    dbCache.clear(CallDbCache.TB_CALL);

    String[] columns = new String[] { CallLog.Calls._ID, CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME };
    Cursor cursor = getContentResolver().query(URI_CALL, columns, null, null, null);
    while (cursor != null && cursor.moveToNext()) {
        int id = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID));
        String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
        String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
        dbCache.insert(CallDbCache.TB_CALL, new LogData(id, number, name, "", "", "", ""));
    }
    cursor.close();

    dbCache.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM