我正在尝试从联系人中查询昵称和 SIP 地址。我遇到的问题是它们都存储在 DATA1 列中。因此,当我运行查询时,我只检索昵称。检索它们并将它们传递到SimpleCursorAdapter
下面的方法是什么?
CursorLoader c = new CursorLoader(getActivity(), baseUri, CONTACTS_NUMBER_PROJECTION2, Data.MIMETYPE+" ='" + Nickname.CONTENT_ITEM_TYPE+"'", null, ORDER);
private static final String[] CONTACTS_NUMBER_PROJECTION2 = new String[] {
SipAddress.DISPLAY_NAME,
SipAddress.SIP_ADDRESS,
BaseColumns._ID};
使用SimpleCursorAdapter
,Nickname.NAME
和SipAddress.SIP_ADDRESS
都是昵称。
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.contact_list, null,
new String[] {Nickname.NAME, SipAddress.SIP_ADDRESS},
new int[] {R.id.text1, R.id.text2}, 0);
屏幕截图看起来像这样。较小的字体应该是 Sip 地址。
如果我更改Nickname.CONTENT_ITEM_TYPE
为,SipAddress.CONTENT_ITEM_TYPE
我会得到 Sip 地址而不是昵称。我不确定如何让两者都出现。
更新:
我将 Nickname.NAME 和 SipAddress.SIP_ADDRESS 分别更改为 Nickname.DATA7 和 Nickname.DATA*。为我的 selectionArgs 添加了“null”。实际上,我确实得到了昵称和 sip 地址,但不在同一行:
更新 2:
我将 sip 和昵称值存储在 StructuredName.DISPLAY_NAME 和 StructuredName.GIVEN_NAME 下,然后使用适配器加载它们。我将 selectionArgs 更改为 Data.MIMETYPE+" ='" + StructuredName.CONTENT_ITEM_TYPE+"'"
结果是这样的:
if (key.equals("alias")) {
contacts.add(ContentProviderOperation
.newInsert(
ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
userDict.get(key).toString())
.build());
}
if (key.equals("sipExt")) {
contacts.add(ContentProviderOperation
.newInsert(
ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID,
0)
.withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
userDict.get(key).toString())
.build());
}