2015-09-04 37 views
0

我试图从配置文件中获取用户信息(名字,姓氏,电话号码,电子邮件地址,.etc)。下面是我的代码,奇怪的是有几个记录(cursor.moveToNext()多次工作),其中一个包含电话中的电子邮件值,另一个包含电子邮件字段中的地址。我需要的只是一个正确的记录,而不是挑选和合并件。从用户档案中找到名,姓,电话号码?

我确实添加了必要的权限,所以应该没有问题。

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.READ_PROFILE" /> 

任何提示?感谢

下面是我的代码

private static final String[] PERSONAL_ADDRESS_PROJ = { 
      ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
      ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Email.ADDRESS, 

    }; 

    private static final int INDEX_GIVEN_NAME = 0; 
    private static final int INDEX_FAMILY_NAME = INDEX_GIVEN_NAME + 1; 
    private static final int INDEX_PHONE_NUMBER = INDEX_FAMILY_NAME + 1; 
    private static final int INDEX_EMAIL = INDEX_PHONE_NUMBER + 1; 

private SignupModel searchForProfile() { 


     final Uri uri = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, 
       ContactsContract.Contacts.Data.CONTENT_DIRECTORY); 

     String selection = ContactsContract.Contacts.Data.MIMETYPE + " = ?" + " OR " + 
       ContactsContract.Contacts.Data.MIMETYPE + " = ?" + " OR " + 
       ContactsContract.Contacts.Data.MIMETYPE + " = ?" ; 

     String [] args = new String[]{ ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, 
         ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, 
         ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE}; 

     Cursor cursor = mContext.getContentResolver().query(uri, PERSONAL_ADDRESS_PROJ, selection, args, null); 
     SignupModel model; 

     if (cursor != null && cursor.moveToFirst()) { 
      try { 
       do 
       { 
        final String givenName = cursor.getString(INDEX_GIVEN_NAME); 
        final String familyName = cursor.getString(INDEX_FAMILY_NAME); 
        final String phone = cursor.getString(INDEX_PHONE_NUMBER); 
        final String email = cursor.getString(INDEX_EMAIL); 

        model = new SignupModel(email,null,null,givenName, familyName, phone,null); 

       }while (cursor.moveToNext()); //loop for debugging purpose 

      } catch (Exception e) { 
       model = null; 
      } finally { 
       cursor.close(); 
      } 

     } else { 
      LogUtils.LOGD(TAG, "Couldn't find profile entry"); 
      model = null; 
     } 
     return model; 
    } 

回答

0

你不会得到所有的信息在一个记录中所有存储为根据MIMETYPE单独项目。读取游标时,应首先从游标读取MIMETYPE,然后从相应的列中读取数据。

要解释,你已经给你选择3个MIME类型,你会得到至少有三个记录,如果用户已经输入的所有信息,名字,你会得到这将对DISPLAY_NAME,GIVEN_NAME,FAMILY_NAME等 一个记录考虑到他添加了多少个号码,您还将获得一个或多个PHONE记录,每个记录也将包含该类型(MOBILE,HOME等) 同样适用于EMAIL。

对于名称列是指this link 电话和电子邮件存储在DATA1列中。

Phone

Email

相关问题