如果number为UNKNOWN,则CallLog.Calls.CACHED_NAME发出问题

时间:2012-08-20 08:02:19

标签: android android-contacts

我正在研究最新的Android设备列表,我遇到了一个问题 CallLog.Calls.CACHED_NAME

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

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

例如, 最近的电话是 ABC:888-888-8888 XYZ:999-999-9999 然后它会正常工作。

但如果它 NO NAME:444-444-4444 然后就会崩溃。

任何人都可以说出这个问题会出现什么问题?

2 个答案:

答案 0 :(得分:1)

当我尝试从没有姓名的通话记录中获取电话号码时,我遇到了同样的问题。 CallLog.Calls.CACHED_NAME没有返回任何值,即使是null。 过了一会儿,我通过建立这个光标解决了这个问题:

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

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

答案 1 :(得分: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);                                 
                             }
                 }