Нет дубликатов в списке журналов вызовов

Снимок экрана просмотра списка вызовов, который у меня есть прямо сейчас

Я просто не хочу дублировать значения в своей базе данных. Так что одно имя контакта будет отображаться один раз в моем списке, а также я хочу, чтобы количество вызовов было связано с его номером. Я могу получить уникальное значение, используя уникальное ключевое слово при вставке в базу данных через запрос, но у меня нет никаких сведений о подсчете звонков, которые я получаю с этого номера.

Я использую следующий код для получения журналов вызовов из базы данных. Прямо сейчас я просто получаю доступ к журналам вызовов и отображаю их. Я не сохранил в базе данных. Я просто не представляю, как подсчитать количество звонков с определенного номера и показать его перед ним. Как это отображается в приложениях журнала вызовов.

      Cursor callLogCursor = getContentResolver().query(
            android.provider.CallLog.Calls.CONTENT_URI, null, null, null,
            android.provider.CallLog.Calls.DEFAULT_SORT_ORDER);
    if (callLogCursor != null) {
        while (callLogCursor.moveToNext()) {
            String id = callLogCursor.getString(callLogCursor
                    .getColumnIndex(CallLog.Calls._ID));
            String name = callLogCursor.getString(callLogCursor
                    .getColumnIndex(CallLog.Calls.CACHED_NAME));
            String cacheNumber = callLogCursor.getString(callLogCursor
                    .getColumnIndex(CallLog.Calls.CACHED_NUMBER_LABEL));
            String number = callLogCursor.getString(callLogCursor
                    .getColumnIndex(CallLog.Calls.NUMBER));
            long dateTimeMillis = callLogCursor.getLong(callLogCursor
                    .getColumnIndex(CallLog.Calls.DATE));
            long durationMillis = callLogCursor.getLong(callLogCursor
                    .getColumnIndex(CallLog.Calls.DURATION));
            int callType = callLogCursor.getInt(callLogCursor
                    .getColumnIndex(CallLog.Calls.TYPE));

            String duration = getDuration(durationMillis * 1000);

            String dateString = getDateTime(dateTimeMillis);


            if (cacheNumber == null)
                cacheNumber = number;
            if (name == null)
                name = "";
            Uri image = null;

            try {
                String conId = fetchContactIdFromPhoneNumber(cacheNumber);
                long contId = Long.parseLong(conId);
                image = getPhotoUri(contId);
            }catch(Exception e) {
                Log.e("Exception", e.getMessage());
            }


                CallLogModel callLogModel = new CallLogModel(image, name, cacheNumber,
                        duration, dateString);


            if (callType == CallLog.Calls.OUTGOING_TYPE) {
                outgoingList.add(callLogModel);

            } else if (callType == CallLog.Calls.INCOMING_TYPE) {
                incomingList.add(callLogModel);

            } else if (callType == CallLog.Calls.MISSED_TYPE) {
                missedcallList.add(callLogModel);

            }

        }

        callLogCursor.close();
    }
}

person user3101598    schedule 24.12.2013    source источник
comment
хорошо, я ... но я ничего не добавил, чтобы получить количество вызовов, связанных с определенным номером.   -  person user3101598    schedule 24.12.2013
comment
Используйте отличное ключевое слово, это вернет уникальную запись из базы данных. db.rawQuery (выберите DISTINCT из table_name, null);   -  person Md Abdul Gafur    schedule 24.12.2013
comment
Да. Но нам нужен ваш текущий код, чтобы помочь вам.   -  person MysticMagicϡ    schedule 24.12.2013
comment
добавьте новое поле numCall в модель и проверьте, существует ли уже запись, затем просто найдите (не нужно добавлять) индекс этой модели в списке и увеличьте numCall на 1.   -  person Ketan Ahir    schedule 24.12.2013
comment
@Ketan, извините, я не понял .. пожалуйста, уточните   -  person user3101598    schedule 24.12.2013
comment
I may get unique value by using unique keyword while inserting in database through query. теперь, если вы можете идентифицировать все уникальные данные, добавьте одно новое поле (numCall) и проверьте, не дублируется ли конкретная запись, а затем просто найдите ее и увеличьте numCall для этой записи.   -  person Ketan Ahir    schedule 24.12.2013


Ответы (1)


Вы можете попробовать использовать предложение group by следующим образом:

String[] columns = new String[] { CallLog.Calls._ID, CallLog.Calls.NUMBER, CallLog.Calls.CACHED_NAME };
Cursor cursor = getContentResolver().query(URI_CALL, columns, null, null, null);
person vipul mittal    schedule 24.12.2013