2015-09-04 33 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

相關問題