0

我正在处理 android 设备的最近通话列表,但我遇到了CallLog.Calls.CACHED_NAME的一个问题

最近通话可能有两种情况,该号码可以在联系人列表名称中,也可以是未知的。因此,如果联系人中存在姓名,那么它将显示在CallLog.Calls.CACHED_NAME中,但如果它是未知号码,那么它将给出什么值?

因为如果我比较,如果缓存的名称为空,那么我将数字作为名称,但在模拟器中它工作正常,但是当我将它安装在三星 Galaxy ACE DUOS中时,如果最近的呼叫有未知号码,那么它会崩溃。

例如,最近通话是ABC : 888-888-8888XYZ : 999-999-9999 那么它会正常工作。

但如果它是NO NAME : 444-444-4444 那么它会崩溃。

任何人都可以告诉这个问题可能是什么问题?

4

2 回答 2

2

当我试图从没有名字的通话记录中获取电话号码时,我遇到了同样的问题。CallLog.Calls.CACHED_NAME没有返回任何值,甚至为null 。过了一会儿,我通过 bilding 这个光标解决了这个问题:

Cursor c1 = SetStatsView.this.managedQuery(CallLog.Calls.CONTENT_URI, 
                                           new String[]{CallLog.Calls.CACHED_NAME,  
                                           CallLog.Calls.NUMBER, CallLog.Calls.DATE}, 
                                    CallLog.Calls.CACHED_NAME+" is null", null, null);

它只返回没有联系人姓名的号码。

于 2012-10-08T08:26:41.340 回答
0

如前所述,我已经按照以下方式完成了这项工作。您不需要创建新查询,只需使用条件来处理空值,请参见下面的代码

Cursor mCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null,null,null);
String Name;
List<String>NameHolder=new ArrayList<String>();
int nameValue=mCursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
 while (mCursor.moveToNext()){
             String name=mCursor.getString(nameValue);
                   if(name==null){
                       Name="Unknown";
                       NameHolder.add(Name);
                                 }
                       else {
                           Name=name;
                           NameHolder.add(Name);                                 
                             }
                 }
于 2018-03-29T23:59:48.160 回答