问题描述
- Android:使用ContentResolver,CONTACT_ID 是列还是行?
-
我用以下代码实现在屏幕上打印contactId
和telephone number
。
我在网上找了这段代码,有些语句还是不明白:ContentResolver solver = getContentResolver(); String mess=""; Cursor cursor = solver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); while (cursor.moveToNext()){ String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); mess = mess + "ID: "+contactId+"n"; Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while (phones.moveToNext()) { String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); mess = mess + phoneNumber + "n"; } }
这个语句我不知道什么意思:
Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
就像Android 开发中第三个参数:
selection : A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given URI.
所以,按照上面的定义,CONTACT_ID意思是一个行。因为
filter which row to return
。
下面这一行:String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
CONTACT_ID看上去意思是一个列。
对这个问题我很疑惑,谁可以帮我指点一二呢?谢谢!
解决方案
CONTACT_ID是列而不是行,它是表中的一个字段,是一个属性,它当然是列。你看它是不是指向的是"contact_id"这字符串?这个字符串就是表中的字段名。“filter which row to return”虽然我不懂这鸟语,但我想意思应该和“满足条件的行将被返回”差不多,所以它并不表示行。第三个参数是SQL中“where”部分的字符串。也就是说
Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null)
的意思是表中满足CONTACT_ID列中值等于contactId的行都被返回。
解决方案二:
CONTACT_ID是一个列,应该是指contact表的主键Id,selection理解成查询条件就好了,
就像select * from 表名 where 条件 中 “where”后面的字符串。如果写成null,就相当于 select * from 表名,没有任何过滤条件。
时间: 2024-08-03 17:18:00