如果您想了解AndroidAPI8,10ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.net5D
如果您想了解Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.net 5 DataContractSerialize 忽略 MessageContractAttribute、android – ContactsContract.CommonDataKinds.StructuredName的问题、android – ContactsContract.Data中的Distinct CONTACT_ID、android – 使用Contact id获取RawContact id的有价值的信息。
本文目录一览:- Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列
- .net 5 DataContractSerialize 忽略 MessageContractAttribute
- android – ContactsContract.CommonDataKinds.StructuredName的问题
- android – ContactsContract.Data中的Distinct CONTACT_ID
- android – 使用Contact id获取RawContact id
Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列
这是查询:
Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI,new String[] { ContactsContract.Data._ID,ContactsContract.Data.CONTACT_ID,ContactsContract.Data.disPLAY_NAME,ContactsContract.CommonDataKinds.Organization.COMPANY,ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.Data.LOOKUP_KEY,ContactsContract.CommonDataKinds.Phone.NUMBER,Contacts.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.MIMETYPE,ContactsContract.CommonDataKinds.StructuredPostal.CITY,ContactsContract.CommonDataKinds.StructuredPostal.STREET,ContactsContract.CommonDataKinds.StructuredPostal.REGION,ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE},ContactsContract.Data.HAS_PHONE_NUMBER + " >? ",new String[] { "0" },ContactsContract.Data.disPLAY_NAME + " COLLATE NOCASE ASC");
以下是它抛出的异常:
android.database.sqlite.sqliteException:没有这样的列:has_phone_number :,编译时:SELECT _id,contact_id,display_name,data1,data2,lookup,mimetype,data7,data4,data8,data9 FROM view_data_restricted data WHERE(1 )AND(has_phone_number>?)ORDER BY display_name COLLATE NOCASE ASC
奇怪的是,以下代码也不起作用:
Cursor contactsCur = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,new String[] { ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER},ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER + " >? ",null);
它产生:java.lang.IllegalArgumentException:无效的列has_phone_number
http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html声明ContactsContract.CommonDataKinds.Phone可以访问HAS_PHONE_NUMBER来自界面android.provider.ContactsContract.ContactsColumns
为了增加陌生感,此查询有效:
Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI,new String[] { ContactsContract.Data.LOOKUP_KEY},null,null);
但是这个没有:
Cursor contactsCur = getContentResolver().query( ContactsContract.Data.CONTENT_URI,new String[] { ContactsContract.Data.HAS_PHONE_NUMBER},null);
ContactsContract.Data.LOOKUP_KEY来自与ContactsContract.Data.HAS_PHONE_NUMBER相同的隐式连接!
我哪里错了?
解决方法
供参考(请注意,数据/电话URI中不存在has_phone_number):
Columns for content://com.android.contacts/contacts: - times_contacted - contact_status - custom_ringtone - has_phone_number - phonetic_name - phonetic_name_style - contact_status_label - lookup - contact_status_icon - last_time_contacted - display_name - sort_key_alt - in_visible_group - _id - starred - sort_key - display_name_alt - contact_presence - display_name_source - contact_status_res_package - contact_status_ts - photo_id - send_to_voicemail
和:
Columns for content://com.android.contacts/data/phones: - data_version - phonetic_name - phonetic_name_style - contact_id - lookup - data12 - data11 - data10 - mimetype - data15 - data14 - data13 - display_name_source - data_sync1 - data_sync3 - data_sync2 - data_sync4 - account_type - custom_ringtone - status - data1 - data4 - data5 - data2 - data3 - data8 - data9 - group_sourceid - data6 - account_name - data7 - display_name - in_visible_group - display_name_alt - contact_status_res_package - is_primary - contact_status_ts - raw_contact_id - times_contacted - contact_status - status_res_package - status_icon - contact_status_icon - mode - version - last_time_contacted - res_package - _id - name_verified - status_ts - dirty - is_super_primary - photo_id - send_to_voicemail - name_raw_contact_id - contact_status_label - status_label - sort_key_alt - starred - sort_key - contact_presence - sourceid
.net 5 DataContractSerialize 忽略 MessageContractAttribute
如何解决.net 5 DataContractSerialize 忽略 MessageContractAttribute?
我正在尝试将 .net 4.7 soap 客户端转换为新的 .net 5 项目。 soap 客户端由 wcf 生成,我将生成的模型与自己编写的 WebClient 一起使用。我不想使用 BasicHttpsClient。在 4.7 项目中,我使用 TypedMessageConverter 来序列化/反序列化我的请求内容。
.net 5 中序列化/反序列化我的肥皂消息内容的方式是什么? TypedMessageConverter 在 .net 5 中不存在,DataContractSerializer 忽略 MessageContractAttribute(WrapperName 和 WrapperNamespace)
感谢您的帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
android – ContactsContract.CommonDataKinds.StructuredName的问题
如果您不介意,请查看代码.它是手工制作的,并且删除了大量错误检查,以使其尽可能小地发布在此处. “不工作”的评论是对我不起作用的部分.
两个前导if()是onActivityResult的一部分,我在联系人选择结束时收到数据.通过以下方式拨打电话:
intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent,Main.DIALOG_PICKCONTACT);
提前谢谢了
HJW
if (requestCode == Main.DIALOG_PICKCONTACT) { if (resultCode == RESULT_OK) { int i; String s; Cursor cursorContacts = managedQuery(intent.getData(),null,null); if (cursorContacts != null) { if (cursorContacts.movetoNext()) { ContentResolver contentResolver = getContentResolver(); String contactId = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts._ID)); i = cursorContacts.getColumnIndex(ContactsContract.Contacts.disPLAY_NAME); // cursorContacts.getString(i); *** is disPLAY_NAME Cursor cursorEmail = contentResolver.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",new String[] { contactId },null); if (cursorEmail != null) { while (cursorEmail.movetoNext()) { int type = cursorEmail.getInt(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); s = cursorEmail.getString(cursorEmail.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); switch (type) { case ContactsContract.CommonDataKinds.Email.TYPE_HOME: // s *** is private Email break; case ContactsContract.CommonDataKinds.Email.TYPE_WORK: // s *** is business Email break; } } cursorEmail.close(); } Cursor cursorOrganization = contentResolver.query( ContactsContract.Data.CONTENT_URI,ContactsContract.CommonDataKinds.Organization.CONTACT_ID + " = ?",null); if (cursorOrganization != null) { if (cursorOrganization.movetoNext()) { s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); // s *** Company name not working s = cursorOrganization.getString(cursorOrganization.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); // s *** Function within company not working } cursorOrganization.close(); } s = cursorContacts.getString(cursorContacts.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (Integer.parseInt(s) > 0) { Cursor cursorPhone = contentResolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",null); if (cursorPhone != null) { while (cursorPhone.movetoNext()) { int type = cursorPhone.getInt(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); s = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); switch (type) { case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME: // s *** is private fax break; case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK: // s *** is business fax break; case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: // s *** is private phone break; case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: // s *** is mobile phone break; case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: // s *** is business phone break; case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE: // s *** is business mobile break; } } cursorPhone.close(); } } Cursor cursorStructuredname = contentResolver.query( ContactsContract.Data.CONTENT_URI,ContactsContract.CommonDataKinds.Structuredname.CONTACT_ID + " = ?",null); if (cursorStructuredname != null) { if (cursorStructuredname.movetoNext()) { i = cursorStructuredname.getColumnIndex(ContactsContract.CommonDataKinds.Structuredname.GIVEN_NAME); // cursorStructuredname.getString(i); *** given name not working i = cursorStructuredname.getColumnIndex(ContactsContract.CommonDataKinds.Structuredname.MIDDLE_NAME); // cursorStructuredname.getString(i); *** middle name not working i = cursorStructuredname.getColumnIndex(ContactsContract.CommonDataKinds.Structuredname.PREFIX); // cursorStructuredname.getString(i); *** prefix not working i = cursorStructuredname.getColumnIndex(ContactsContract.CommonDataKinds.Structuredname.SUFFIX); // cursorStructuredname.getString(i); *** suffix not working } cursorStructuredname.close(); } Cursor cursorStructuredPostal = contentResolver.query( ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = ?",null); if (cursorStructuredPostal != null) { while (cursorStructuredPostal.movetoNext()) { int type = cursorStructuredPostal.getInt(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); switch (type) { case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: //s *** is private country break; case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: // s *** is business country break; } s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); switch (type) { case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: // s *** is private city break; case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: // s *** is business city break; } s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); switch (type) { case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: // s *** is private postcode break; case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: // s *** is business postcode break; } s = cursorStructuredPostal.getString(cursorStructuredPostal.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); switch (type) { case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME: // s *** is private street break; case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK: // s *** is business street break; } } cursorStructuredPostal.close(); } Cursor cursorWebsite = contentResolver.query( ContactsContract.Data.CONTENT_URI,ContactsContract.CommonDataKinds.Website.CONTACT_ID + " = ?",null); if (cursorWebsite != null) { while (cursorWebsite.movetoNext()) { i = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL); int type = cursorWebsite.getColumnIndex(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE); s = cursorWebsite.getString(i); switch (type) { case ContactsContract.CommonDataKinds.Website.TYPE_HOME: // s *** private url not working break; case ContactsContract.CommonDataKinds.Website.TYPE_WORK: // s *** business url not working break; } } cursorWebsite.close(); } } cursorContacts.close(); } } }
解决方法
用于Structuredname:
// projection String[] projection = new String[] {ContactsContract.CommonDataKinds.Structuredname.FAMILY_NAME,ContactsContract.CommonDataKinds.Structuredname.GIVEN_NAME,ContactsContract.CommonDataKinds.Structuredname.MIDDLE_NAME}; String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] whereParameters = new String[]{this.contact_id,ContactsContract.CommonDataKinds.Structuredname.CONTENT_ITEM_TYPE}; //Request Cursor contacts = this.resolver.query(ContactsContract.Data.CONTENT_URI,projection,where,whereParameters,null); //Iteration if (contacts.movetoFirst()) { //code here } contacts.close();
android – ContactsContract.Data中的Distinct 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.但是有一个例外:java.lang.IllegalArgumentException:无效的列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”:语法错误:,同时编译: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,lookup FROM view_data_restricted data WHERE (1) AND (data1= ? AND mimetype= ? ) ORDER BY display_name ASC GROUP BY contact_id
是否有可能使用不同的查询?
也许,我应该向URI添加一些东西?
解决方法
selectionBuilder.append(") GROUP BY (")
从ICS及更高版本开始,查询解释器更加智能,并关闭任何未闭合的括号以防止注入.
但是,我不明白为什么你需要明确的contact_ids.联系人应该只有一个数据来与一个组建立关联,因此您可能会在每一行上收到不同的联系人.
此外,可能与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 – 使用Contact id获取RawContact id
我已经构建了以下方法,以使用从Contacts表中获取的id从RawContacts表中获取id.此方法无法进行异常处理.
public int getRawContactId(int contactId)
{
String[] projection=new String[]{ContactsContract.RawContacts._ID};
String selection=ContactsContract.RawContacts.CONTACT_ID+"=?";
String[] selectionArgs=new String[]{String.valueOf(contactId)};
Cursor c=context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,projection,selection,selectionArgs , null);
int rawContactId=c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID));
Log.d(TAG,"Contact Id: "+contactId+" Raw Contact Id: "+rawContactId);
return rawContactId;
}
相应的Logcat如下所示:
FATAL EXCEPTION: main
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null,
request=1, result=-1, data=Intent {
dat=content://com.android.contacts/contacts/lookup/3844i21/993 flg=0x1 }} to
activity {com.example.contactbadger/com.example.contactbadger.MainActivity}:
android.database.Cursorindexoutofboundsexception: Index -1 requested, with a
size of 1
at android.app.ActivityThread.deliverResults(ActivityThread.java:3367)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
at android.app.ActivityThread.access$1100(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.Cursorindexoutofboundsexception: Index -1 requested, with a size of 1
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:424)
at android.database.AbstractwindowedCursor.checkPosition(AbstractwindowedCursor.java:136)
at android.database.AbstractwindowedCursor.getInt(AbstractwindowedCursor.java:68)
at android.database.CursorWrapper.getInt(CursorWrapper.java:102)
at com.example.contactbadger.ContactUtils.getRawContactId(ContactUtils.java:171)
at com.example.contactbadger.MainActivity.getContactPhoto(MainActivity.java:65)
at com.example.contactbadger.MainActivity.onActivityResult(MainActivity.java:104)
at android.app.Activity.dispatchActivityResult(Activity.java:5322)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3363)
解决方法:
您需要将光标移动到第一个位置.默认情况下,光标设置为-1索引,因此将其移动到第0个位置需要使用moveToFirst().
所以你可以修改你的代码
Cursor c = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,projection,selection,selectionArgs , null);
if (c.movetoFirst()) {
int rawContactId=c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID));
}
关于Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于.net 5 DataContractSerialize 忽略 MessageContractAttribute、android – ContactsContract.CommonDataKinds.StructuredName的问题、android – ContactsContract.Data中的Distinct CONTACT_ID、android – 使用Contact id获取RawContact id的相关信息,请在本站寻找。
本文标签: