我正在研究最新的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 然后就会崩溃。
任何人都可以说出这个问题会出现什么问题?
答案 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);
}
}