2013-07-21 2 views
1
Call Log Calls entry is this 

- Name  Number   TYPE   date called 
- Jed   12345   Incoming  7-18-2013 
- Roger  14611   Incoming  7-18-2013 
- Jed   12345   Incoming  7-18-2013 
- Jed   12345   Incoming  7-18-2013 
- Kevin  11111   Incoming  7-18-2013 

Привет, я хочу, чтобы запросить в андроида так, что я только получить Джеда, 12345 < <, так как он имеет наиболее повторяющиеся значения в списке, им предполагают, чтобы сделать это в SQLite (Android запросов), но я dont знать, какие функции вызывать Это код, который я использовал, но я смог получить только последнее число, которое вызывается вместо того, которое было записано в большинстве записей. КАК Я ДЕЛАЮ ВОПРОС?Как получить номер наиболее частого ввода значения в callLog.calls?

Date date=new Date() ; 

    Cursor c = contxt.getContentResolver().query(CallLog.Calls.CONTENT_URI, 
      null, CallLog.Calls.TYPE + " AND " + CallLog.Calls.INCOMING_TYPE + 
      " AND " + CallLog.Calls.Date + ">=" + date.getDate() , 
      null, 
      CallLog.Calls.DATE + " DESC LIMIT 1"); 
    if(c!=null) 
     do{ 
      int callCounter = c.getCount(); 
      String num = callLog_cursor.getString(callLog_cursor 
       .getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 
     }while(c.moveToFirst()); 
+0

Попробуйте использовать GROUP BY и ORDER BY COUNT (*) DESC. – LordMarty

+0

привет! как я могу применить это в моем запросе? можете ли вы написать код для меня? я действительно не знаком с orderby и group by clauses, спасибо! мне действительно нужна вся помощь, я могу получить :) –

ответ

3

Если вы ищете для одного запроса, чтобы сделать работу, я извиняюсь сказать, что (насколько са мои навыки Google идет) не существует. Я решил это по-другому, что вы можете найти полезным.

Создать эту функцию где-то в вашей деятельности:

public static void searchAndDisplay(ArrayList<String> arr) { 

    ArrayList<String> list1 = new ArrayList(); 
    ArrayList<Integer> list2 = new ArrayList(); 
    for (int i = 0; i < arr.size(); i++) { 
     int index = list1.indexOf(arr.get(i)); 
     if (index != -1) { 
      int newCount = list2.get(index) + 1; 
      list2.set(index, newCount); 
     } else { 
      list1.add(arr.get(i)); 
      list2.add(1); 
     } 
    } 
    for (int i = 0; i < list1.size(); i++) { 
     System.out.println("Number " + list1.get(i) + " occurs " 
       + list2.get(i) + " times."); 

    } 
    int maxCount = 0; 
    int index = -1; 
    for (int i = 0; i < list2.size(); i++) { 
     if (maxCount < list2.get(i)) { 
      maxCount = list2.get(i); 
      index = i; 
     } 
    } 
    System.out.println("Number " + arr.get(index) 
      + " has highest occurrence i.e " + maxCount); // here you might want to do something/return the number with the highest occurences. 
} 

Тогда где вы хотите курсор использовать это:

Date date = new Date(); 
    ArrayList<String> allnumbers = new ArrayList(); 
    Cursor c = this.getContentResolver().query(
      CallLog.Calls.CONTENT_URI, 
      null, 
      CallLog.Calls.TYPE + " AND " + CallLog.Calls.INCOMING_TYPE 
        + " AND " + CallLog.Calls.DATE + ">=" + date.getDate(), 
      null, CallLog.Calls.NUMBER); 

    allnumbers.clear(); 
    if (c != null) 
     c.moveToFirst(); 
    for (int i = 0; c.getCount() > i; i++) { 

     String number1 = c.getString(0); 

     allnumbers.add(number1); 
     c.moveToNext(); 

    } 
    searchAndDisplay(allnumbers); 

Вы можете перепроверить, что номера вы получаете правильно ,

Сообщите мне, как это. :)

+0

Это больше, чем ответ, @LordMarty – hd1

+0

Убрали ответ, потому что он не работал. Попытка понять это. – LordMarty

+0

Ответ по-прежнему здесь, нажмите «удалить» и подтвердите его удаление. – hd1

1
public void getFrequentContact(ArrayList<String> logEntriesArray) { 

    ArrayList<String> numArray  = new ArrayList<String>(); 
    ArrayList<Integer> callCountArray = new ArrayList<Integer>(); 
    int maxIndex = 0; 

    for (int i = 0; i < logEntriesArray.size(); i++) { 
     int index = numArray.indexOf(logEntriesArray.get(i)); 
     if (numArray.contains(logEntriesArray.get(i))) { 
      int newCount = callCountArray.get(index) + 1; 
      callCountArray.set(index, newCount); 
     } else { 
      numArray.add(logEntriesArray.get(i)); 
      callCountArray.add(1); 
     } 
    } 


    for (int i = 0; i < numArray.size(); i++) { 
     System.out.println("Number " + numArray.get(i) + " occurs " 
       + callCountArray.get(i) + " times."); 
    } 


    if(callCountArray.size()>0){ 
    int maxValue = Collections.max(callCountArray); 

     for(int i=0; i<callCountArray.size();i++){ 
      if(callCountArray.get(i)==maxValue) 
       maxIndex = i; 
     } 
    } 
    contactNumOfFreqCaller = numArray.get(maxIndex); 
    Log.wtf(" FREQ NUM ", contactNumOfFreqCaller); 

    } 

я сделал немного пересмотра на код, который вы дали хеху на самом деле там были проблема в получении верхних контактов, чтобы я пересмотрел его немного здесь идет :) спасибо, кстати за помощь !!

Смежные вопросы