2014-03-25 34 views
1

我想从android中的调用日志数据库检索未接来电列表。但是,如果来自某个号码的一个以上的未接电话比我只希望该号码的一个记录的列名称指示来自该特定号码的未接电话的号码。我还想获取其他详细信息,如姓名,电话类型等。 我写了代码给出了所有未接电话清单。例如,如果我有两个来自同一号码的未接来电比我得到两个记录。在Android中使用group by和内容提供者计数

下面是我的代码

String strSelection=null; 
String projection[]={Calls.CACHED_NAME, 
    Calls.NUMBER, 
    Calls.CACHED_NUMBER_TYPE, 
    Calls.CACHED_NUMBER_LABEL}; 

strSelection = android.provider.CallLog.Calls.TYPE + " = " 
    + android.provider.CallLog.Calls.MISSED_TYPE; 

Cursor missedCursor = null;   
missedCursor = mContext.getContentResolver() 
    .query(Calls.CONTENT_URI, projection,strSelection, null, 
     Calls.DATE + " DESC");  

请在提高我的代码帮助。

谢谢。

+0

简而言之:我想要显示来自某个号码/联系人的未接电话,并提及漏接用户从特定号码获得的总数。有没有更好的方法来做到这一点? –

回答

0

您需要添加组通过PARAM

strSelection = android.provider.CallLog.Calls.TYPE + " = " +   
android.provider.CallLog.Calls.MISSED_TYPE +") GROUP BY (" + Calls.NUMBER+ ")"; 
+0

不工作。例外: android.database.sqlite.SQLiteException:接近“GROUP”:语法错误(代码1):编译时:SELECT name,number,numbertype,numberlabel FROM logs WHERE(logs.logtype = 100 OR logs.logtype = 110 OR logs.logtype = 900 OR logs.logtype = 500 OR logs.logtype = 800 OR logs.logtype = 120 OR logs.logtype = 510 OR logs.logtype = 1000 OR(logs.logtype = 200 AND number not in(SELECT AND((type = 3 GROUP BY(number))AND((type!= 4))AND(logtype = 100 OR logtype = 500 OR logtype = 950))ORDER BY date DESC –

2

我创建的选择

CallLog.Calls._ID + " in (SELECT " + CallLog.Calls._ID + " FROM calls WHERE type != " + CallLog.Calls.VOICEMAIL_TYPE + " GROUP BY " + CallLog.Calls.NUMBER+")" 

,它为我工作,但要注意,我们使用硬编码表名“呼叫”

+0

很好的解决方案,它的工作原理。谢谢。 –