1

SQL をテストすると、Sqlite Spy で正常に動作します。

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

ContentConsolver で使用したいのですが、「group by」では機能しません。

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*/ );

私は何をすべきか?

4

1 に答える 1

0

@njzk2 は HashSet: Group By in ContentResolver in Ice Cream Sandwichを使用してトリックを行いましたが、合計が必要な場合は 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();
}
于 2012-08-20T07:36:44.293 に答える