Android 联系人查询和空字符串存在问题

Android 联系人查询和空字符串存在问题,android,Android,编辑:解决它:(在花了几个小时之后,这是最简单的解决方案。下面是正确的代码 好的。我可以通过查询来查找某人的电话号码。我想做的是,如果我查找的电话号码不存在,它只返回电话号码。以下是我到目前为止得到的: Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); Cursor c = context.getContentResolver().query(looku

编辑:解决它:(在花了几个小时之后,这是最简单的解决方案。下面是正确的代码

好的。我可以通过查询来查找某人的电话号码。我想做的是,如果我查找的电话号码不存在,它只返回电话号码。以下是我到目前为止得到的:

Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber)); 

Cursor c = context.getContentResolver().query(lookupUri, new String[]{PhoneLookup.DISPLAY_NAME}, null, null, null);  

while(c.moveToNext()) {
    conname = c.getString(c.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
    }
    if (conname==null || conname.equals("") || conname.equals("null")) {
        conname = phoneNumber;
    }

if (messages.length > -1) {
    smsToast = conname + ":\n'" + messages[0].getMessageBody() + "'";
    Toast.makeText(context, smsToast, Toast.LENGTH_LONG).show();
    Log.e("Text Thing", conname + " ugh");
    Log.e("Text Thing", phoneNumber);
}

我尽一切努力将conname(联系人姓名)恢复为电话号码。如果在toast上没有返回任何内容,它会显示conname=null。那么我缺少什么呢?

如果
c.moveToNext()
第一次返回
false
,则不可能将空
conname
设置回电话号码。您可以使用
c.moveToFirst()
测试光标是否为空,并在这种情况下将电话号码分配给
conname

抱歉…仍在学习查询的工作原理:/n我该如何做?或者什么是最好的资源/示例?谢谢!哇…只要意识到我在while语句中有if语句…如果我把它放在它之外(就像我在刚才的编辑中所做的那样),它会工作吗?对我来说似乎是这样。你为什么要检查所有光标响应?为什么不在第一个非空名称处停止?(换句话说,将循环更改为
while(c.moveToNext()&&conname==null){…
不仅效率更高,而且可能更正确。假设有两个联系人的电话号码相同,而第二个没有显示姓名。您的原始代码会将
conname
设置为第一个联系人的姓名,然后将其设置为空。然后您会将其设置回电话号码。我猜您更希望使用f第一个联系人的名字。一旦找到一个名字就打破循环,你就完成了。谢谢。忘了早点接受你的答案。迟做总比不做强。