2013-10-31 35 views
2

編輯的所有細節:僅使用如何查詢聯繫一次

1.NAME 
2.PHONE NUMBER 
3.EMAIL ADDRESS 
4.WEBSITE 
5.PHYSICAL ADDRESS 

我寧願這個使用預取的ContactID做...:什麼,我認爲重要的聯繫方式名單一個光標來獲取指定的所有數據。我最好想找到正確的查詢來做到這一點:

我想一次獲得聯繫人的所有重要細節,我使用下面的代碼要做到這一點:

 public void getAllDataByContactId(int contactId) 
{ 
    Log.d(TAG, "Seriously scared it might not work"); 
    String phoneNo="Phone disconnected"; 
    String email="Email could not be delivered"; 
    String website="Website 404"; 
    String address="Number 13,Dark Street,Area 51,Bermuda Trianlge"; 
    String name="Clint Eastwood"; 
    int hasPhoneNumber; 
    String selection=ContactsContract.Data.CONTACT_ID+"=?"; 
    String[] selectionArgs={String.valueOf(contactId)}; 
    Cursor c=context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null,selection, selectionArgs,ContactsContract.Data.TIMES_CONTACTED); 

    if(c!=null && c.getCount()>0) 
    { 

     while(c.moveToNext()) 
     { 

      phoneNo=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      Log.d(TAG, "Phone number: "+phoneNo); 
      email=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS)); 
      Log.d(TAG, "Email: "+email); 
      website=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL)); 
      Log.d(TAG, "Website :"+website); 
      address=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)); 
      name=c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME)); 
      Log.d(TAG, "Name :"+name); 
     } 
    } 
} 

但是,雖然這不會引發錯誤,但它顯示了許多行,其中包含一個空字符串,其中包含實際值。如何編寫查詢以刪除噪音?

我已經試過這一點,這讓我所有的值:

   String selection=ContactsContract.Data.CONTACT_ID+"=? AND "+ContactsContract.Data.MIMETYPE+"=? OR "+ContactsContract.Data.MIMETYPE+"=? OR "+ContactsContract.Data.MIMETYPE+"=? OR "+ContactsContract.Data.MIMETYPE+"=? OR "+ContactsContract.Data.MIMETYPE+"=?"; 
    String[] selectionArgs={String.valueOf(contactId),ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
+0

有沒有做它,親愛的... –

+0

你本質上說,我需要使用比多個遊標更多的是爲了中檢索我需要的數據(電話號碼,電子郵件,網站等)和將數據存儲在包裝中。是否有通過調整帖子末尾提到的選擇條款來獲取數據的方法? – vamsiampolu

+0

從這種方式你得到親愛的我跟着同樣的4聯繫 –

回答

0

未必是最好的解決辦法。但這是我實現的方式。

ArrayList<String> fnameList = new ArrayList<>(); 
    ArrayList<String> lnameList = new ArrayList<>(); 
    ArrayList<String> mnumList = new ArrayList<>(); 
    ArrayList<String> hnumList = new ArrayList<>(); 
    ArrayList<String> wnumList = new ArrayList<>(); 
    ArrayList<String> mailList = new ArrayList<>(); 

    final DynamoDBMapper dynamoDBMapper = AWSMobileClient.defaultMobileClient().getDynamoDBMapper(); 
    final ContactsDO firstItem = new ContactsDO(); // Initialize the Notes Object 

    firstItem.setUserId(AWSMobileClient.defaultMobileClient().getIdentityManager().getCachedUserID()); 
    String email = null; 

    Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
    String _ID = ContactsContract.Contacts._ID; 
    String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER; 

    Uri EmailCONTENT_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI; 
    String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID; 
    String DATA = ContactsContract.CommonDataKinds.Email.DATA; 

    StringBuffer output = new StringBuffer(); 


    ContentResolver contentResolver = this.getContentResolver(); 

    Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null); 
    // Loop for every contact in the phone 
    if (cursor.getCount() > 0) { 

     while (cursor.moveToNext()) { 

      int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER))); 

      if (hasPhoneNumber > 0) { 
       String contact_id = cursor.getString(cursor.getColumnIndex(_ID)); 
       // Query and loop for every phone number of the contact 
       Cursor pCur = contentResolver.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
         new String[]{contact_id}, ContactsContract.CommonDataKinds.Phone.NUMBER); 
       int flag = 0; 
       assert pCur != null; 
       while (pCur.moveToNext()) { 
        String mobileNum = pCur.getString(pCur.getColumnIndex(
          ContactsContract.CommonDataKinds.Phone.NUMBER)); 

        if (flag == 0) { 
         if(mobileNum!=null){ 
         mnumList.add(mobileNum);} 
        } else if (flag == 1) { 
         if(mobileNum!=null){ 
          hnumList.add(mobileNum);} 
        } else if (flag == 2) { 
         if(mobileNum!=null){ 
          wnumList.add(mobileNum);} 
        } 
        flag++; 
       } 
       if(flag==1){ 
        hnumList.add(""); 
        wnumList.add(""); 
        Log.e("Set","Both added"); 
       } 
       if(flag==2){ 
        wnumList.add(""); 
        Log.e("Set","W added"); 
       } 
       pCur.close(); 


      } 
     } 
    } 
     cursor.close(); 

       String MIME = ContactsContract.Data.MIMETYPE + "=?"; 
       String[] params = new String[]{ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}; 
       final Cursor nameCur = contentResolver.query(
         ContactsContract.Data.CONTENT_URI, 
         null, 
         MIME, 
         params, 
         ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME); 


       assert nameCur != null; 
       int i = 0; 
       while (nameCur.moveToNext()){ 
        String fname = ""; 
        String lname = ""; 
        fname = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)); 
        lname = nameCur.getString(nameCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)); 

        Log.e("In While","All the time"); 

        if(fname!=null){ 
         fnameList.add(fname); 
         Log.e("Put","Value Fname "+fname);} 
        if(lname!=null) { 
         lnameList.add(lname); 
         Log.e("Put","Value Lname "+lname); 
        } 
        if(fname==null){ 
         fnameList.add(" "); 
        } 
        if(lname==null){ 
         lnameList.add(" "); 
        } 
        i++; 
       } 
       nameCur.close(); 


     Cursor cursorB = contentResolver.query(CONTENT_URI, null, null, null, null); 
     // Loop for every contact in the phone 
     if (cursorB.getCount() > 0) { 

      while (cursorB.moveToNext()) { 
       // Query and loop for every email of the contact 
       String[] paramEmail = new String[]{ContactsContract.CommonDataKinds.Email.CONTENT_TYPE}; 
       Cursor emailCursor = contentResolver.query(EmailCONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", paramEmail, ContactsContract.CommonDataKinds.Email.DISPLAY_NAME); 
       int j=0; 
       while (emailCursor.moveToNext()) { 

        email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS)); 
        mailList.add(email); 
        Log.e("Email",email); 
        j++; 
       } 
       if(j==0){ 
        mailList.add(""); 
        Log.e("Email","Dummy Added"); 
       } 
       emailCursor.close(); 

       output.append("\n"); 
      } 
     }cursorB.close(); 

     Cursor cursorD = contentResolver.query(CONTENT_URI, null, null, null, null); 
     // Loop for every contact in the phone 
     if (cursorD.getCount() > 0) { 

      while (cursorD.moveToNext()) { 

       String contact_id = cursorD.getString(cursorD.getColumnIndex(_ID)); 
       //for url 

       String newNoteUrl = ""; 
       String whereName3 = ContactsContract.Data.MIMETYPE + " = ?"; 
       String[] whereNameParams3 = new String[]{ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE}; 


       ContentResolver contentResolverUrl = this.getContentResolver(); 
       try { 
        Cursor cursorUrl = contentResolverUrl.query(ContactsContract.Data.CONTENT_URI, null, whereName3, new String[]{contact_id}, ContactsContract.CommonDataKinds.Website.URL); 

        while (cursorUrl.moveToNext()) { 
         newNoteUrl = cursorUrl.getString(cursorUrl.getColumnIndex(ContactsContract.CommonDataKinds.Website.URL)); 
         Log.e("URL",newNoteUrl); 
        } 
        Log.e("URL","Not Getting"); 
        output.append("\nurl " + newNoteUrl); 
        firstItem.setUrl(newNoteUrl); 


        cursorUrl.close(); 
       } catch (IllegalArgumentException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      }}cursorD.close(); 

    Log.e("#######","##########################"); 
    for(int m=0;m<fnameList.size();m++){ 

     Log.e("Contact Val ",fnameList.get(m)+" , "+lnameList.get(m)+" , "+mnumList.get(m)+" , "+hnumList.get(m)+" , "+wnumList.get(m)+" , "+mailList.get(m)); 
     ContactsDO item = new ContactsDO(); 
     item.setUserId(AWSMobileClient.defaultMobileClient().getIdentityManager().getCachedUserID()); 
     item.setFirstName(fnameList.get(m)); 
     item.setLastName(lnameList.get(m)); 
     item.setMobileNumber(mnumList.get(m)); 
     item.setHomeNumber(hnumList.get(m)); 
     item.setWorkNumber(wnumList.get(m)); 
     item.setEmail(mailList.get(m)); 
     try { 
      //saving to the database 
      dynamoDBMapper.save(item); 

     } catch (final AmazonClientException ex) { 
      Log.e(TAG, "Failed saving item : " + ex.getMessage(), ex); 
     } 
    }