2014-03-25 36 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

很好的解決方案,它的工作原理。謝謝。 –