- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要查询 ContactsContract.Data
表,CONTACT_ID
列中的值将不同(不同)。
代码:
final Uri uri = ContactsContract.Data.CONTENT_URI;
final String[] projection = new String[] {//
ContactsContract.Data.CONTACT_ID, //
ContactsContract.Data._ID, //
ContactsContract.Data.DISPLAY_NAME,//
ContactsContract.Data.LOOKUP_KEY //
};
final StringBuilder selectionBuilder = new StringBuilder();
selectionBuilder.append(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
selectionBuilder.append("= ? AND ");
selectionBuilder.append(ContactsContract.Data.MIMETYPE);
selectionBuilder.append("= ? ");
final String selection = selectionBuilder.toString();
final String[] selectionArgs = new String[] {//
String.valueOf(groupId), //
ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE //
};
return context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
首先,我尝试在投影中将“DISTINCT
”添加到ContactsContract.Data.CONTACT_ID
。但是有一个异常(exception):java.lang.IllegalArgumentException: Invalid column DISTINCT contact_id
然后,我这样写:
"'DISTINCT "+ContactsContract.Data.CONTACT_ID+"'".
java.lang.IllegalArgumentException: Invalid column 'DISTINCT contact_id'
然后,我将添加到 selectionBuilder:
selectionBuilder.append(" GROUP BY ").append(ContactsContract.Data.CONTACT_ID);
再次出现异常:android.database.sqlite.SQLiteException: near "GROUP": syntax error: , while compiling: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1 = ? AND mimetype= ? GROUP BY contact_id) ORDER BY display_name ASC
最后,我在 sortOrder 之后附加了“group by”语句,但是:
android.database.sqlite.SQLiteException: near "GROUP": syntax error: , while compiling: SELECT contact_id, _id, display_name, lookup FROM view_data_restricted data WHERE (1) AND (data1= ? AND mimetype= ? ) ORDER BY display_name ASC GROUP BY contact_id
有没有可能用不同的方式进行查询?也许,我应该向 URI 附加一些内容?
最佳答案
如果您的目标设备低于 ICS,则可以通过在分组依据之前添加 )
和在分组依据之后添加 (
:
selectionBuilder.append(") GROUP BY (")
在 ICS 及更高版本中,查询解释器更加智能并关闭任何未闭合的括号以防止注入(inject)。
但是,我不明白为什么您在这里需要不同的 contact_id。一个联系人可能只有一个数据才能与一个组建立关联,因此您可能会在每一行收到不同的联系人。
另外,可能与http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#CONTENT_GROUP_URI有关它没有记录,但鉴于其位置,它很可能是对属于组的联系人的直接访问。你会使用那个 Uri :
Uri uri = ContentUri.withAppendedId(ContactsContract.Contacts.CONTENT_GROUP_URI, groupId);
然后像Contacts.CONTENT_URI一样查询它
关于android - 与 ContactsContract.Data 不同的 CONTACT_ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9635324/
我的问题看起来很愚蠢,但下面的代码让我很头疼。下面的代码将 contactId 和 telephone number 打印到屏幕。 它运作良好,但我需要更清楚地了解一些事情: ContentReso
我正在使用如下联系人选择器: Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
我正在针对 CommonDataKinds.Phone.CONTENT_URI 运行查询,我得到的所有结果都具有 NOT NULL 电话 ID。 大致的代码是: String[] projec
我正在尝试使用以下代码在用户为我的 android 应用键入时AutoComplete 联系人详细信息。 public class MakePayment extends Activity {
我需要查询 ContactsContract.Data 表,CONTACT_ID 列中的值将不同(不同)。 代码: final Uri uri = ContactsContract.Data.CONT
此 Activity 正在运行,但我想将联系人信息(phone_number、name、contact_id)保存到 ArrayList 中。然后我将使用自定义适配器在复选框中列出查看此数组列表以进行
我在 Android 中使用 ContactsContract API 来获取联系人列表。工作正常。 现在我希望当我点击该列表中的一个名字时,会生成一个 Intent ,该 Intent 将在 and
我想要实现的是在 android 图书联系方式中添加我的应用程序的快捷方式,类似于 Whatsapp 正在做的事情。 我一直在遵循这个教程:http://blogs.quovantis.com/syn
他们是否都引用了联系人的同一个唯一 contactId? 最佳答案 他们应该这样做,但不能保证联系人是否已同步或聚合。您可能想尝试使用 LOOKUP_KEY相反。 关于Android dev : Ph
我是一名优秀的程序员,十分优秀!