【问题标题】:No duplicate in call log listview通话记录列表视图中没有重复项
【发布时间】:2013-12-24 07:14:01
【问题描述】:

我现在得到的通话记录列表视图屏幕截图

我只是不想在我的数据库中出现重复值。这样一个联系人姓名将在我的列表视图中显示一次,并且我想要与其号码关联的呼叫数量。在通过查询插入数据库时​​,我可能会通过使用唯一关键字来获得唯一值,但我没有任何关于计算从该号码获得的呼叫的信息。

我正在使用以下代码从数据库中获取通话记录。现在我只是访问通话记录并显示它。我没有存储在数据库中。我只是不知道如何计算来自特定号码的呼叫次数并将其显示在它前面。因为它显示在呼叫日志应用程序中。

      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();
    }
}

【问题讨论】:

  • 好的,我会的……但我没有添加任何内容来获取与特定号码相关的呼叫数。
  • 使用 distinct 关键字这将返回数据库中的唯一记录。 db.rawQuery("Select DISTINCT from table_name",null);
  • 是的。但我们确实需要您当前的代码才能为您提供帮助。
  • 在模型中添加新字段numCall并检查记录是否已经存在然后只需在列表中找到(无需添加)该模型的索引并将numCall增加1。
  • I may get unique value by using unique keyword while inserting in database through query。现在,如果您可以识别每个唯一数据,然后添加一个新字段(numCall)并检查特定记录是否重复,然后找到它并增加该记录的 numCall。

标签: android sqlite logging call


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多