www.91084.com

GVKun编程网logo

Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列

12

如果您想了解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没有这样的列

Android API 8,10 ContactsContract.Data.HAS_PHONE_NUMBER没有这样的列

以下查询在我的设备上运行正常(API 15).它在运行API 8或API 10的模拟器中不起作用.

这是查询:

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相同的隐式连接!

我哪里错了?

解决方法

您遇到的主要问题是ContactsContract.CommonDataKinds.Phone.CONTENT_URI会自动过滤has_phone_number = 1.因此,您可以保证Phone.CONTENT_URI的所有内容都有电话号码.然后,您可以通过检查Phone.TYPE是Phone.TYPE_MOBILE还是Phone.TYPE_WORK_MOBILE(例如)中的一个来进一步过滤掉它,如果您想限制它具有的电话号码类型.

供参考(请注意,数据/电话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 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的问题

android – ContactsContract.CommonDataKinds.StructuredName的问题

在查询联系人数据时,我得到了大部分工作.我正在与Structuredname和Organization战斗.他们不适合我.

如果您不介意,请查看代码.它是手工制作的,并且删除了大量错误检查,以使其尽可能小地发布在此处. “不工作”的评论是对我不起作用的部分.

两个前导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

android – ContactsContract.Data中的Distinct CONTACT_ID

我需要查询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.但是有一个例外: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添加一些东西?

解决方法

如果您的目标是ICS以下的设备,您可以在group by和a之前添加a)来使用GROUP_BY子句(之后:

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

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的相关信息,请在本站寻找。

本文标签: