2013-12-19 87 views

回答

0

好吧,我現在明白了這是如何工作的 - 它實際上已經完成排序。

通過這樣的:

getContentResolver().query(Data.CONTENT_URI, null, null, null, Phone.NUMBER+" ASC"); 

我得到:

id: 60, data1: +34600000000, mimetype: phone_v2 
id: 59, data1: +34698765432, mimetype: phone_v2 
id: 59, data1: JohnDavid1 Doe, mimetype: name 
id: 60, data1: JohnDavid2 Doe, mimetype: name 

如果我通過DESCquery(),將獲得:

id: 60, data1: JohnDavid2 Doe, mimetype: name 
id: 59, data1: JohnDavid1 Doe, mimetype: name 
id: 59, data1: +34698765432, mimetype: phone_v2 
id: 60, data1: +34600000000, mimetype: phone_v2 

所以結果實際上是排序的,雖然它是不按照我的預期排序Contact ID

0

嘗試用這傢伙:)好運

的,這是類

public class ReadContacts extends AsyncTask<Void, Void, Void>{ 
    private ListView contactsList; 

    private Context cntx; 
    private Constant constants; 

    static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { 
     Contacts._ID, // 0 
     Contacts.DISPLAY_NAME, // 1 
     Contacts.STARRED, // 2 
     Contacts.TIMES_CONTACTED, // 3 
     Contacts.CONTACT_PRESENCE, // 4 
     Contacts.PHOTO_ID, // 5 
     Contacts.LOOKUP_KEY, // 6 
     Contacts.HAS_PHONE_NUMBER, // 7 
    }; 

    private long contactId; 
    private String display_name; 
    private String phoneNumber; 

    private ArrayList<ContactsWrapper>contactWrap = new ArrayList<ContactsWrapper>(); 
    private HashMap<Long, ArrayList<ContactsWrapper>>map = new HashMap<Long, ArrayList<ContactsWrapper>>(); 

    private ContactsAdapter adapter; 

    private DataController controller; 

    public ReadContacts(Context cntx, ListView contactList) { 
     // TODO Auto-generated constructor stub 
     this.cntx = cntx; 
     constants = new Constant(); 
     this.contactsList = contactList; 

     controller = DataController.getInstance(); 
    } 

    @Override 
    protected void onPreExecute() { 
     // TODO Auto-generated method stub 
     super.onPreExecute(); 
     if(!(controller.contactWrapper.size()>0)) 
      constants.displayProgressDialog(cntx, "Loading Contacts...", "Please Wait"); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     if(!(controller.contactWrapper.size()>0)) 
     { 
     try { 
      String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" 
        + Contacts.HAS_PHONE_NUMBER + "=1) AND (" 
        + Contacts.DISPLAY_NAME + " != ''))"; 

      Cursor c = cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, 
        null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); 

      int colorcounter = 0; 
      String[] colorcounter_array = { "#91A46B", "#8BB6B5", "#CAA973", "#8DA6C8","#D19B8D"}; 

      int color_string; 
      for(int i=0;i<c.getCount();i++) 
      { 
//    contactWrap.clear(); 
       try { 
        contactId = 0; 
        String hasPhone = ""; 
        display_name = ""; 
        phoneNumber = ""; 

        c.moveToPosition(i); 

        contactId = c.getLong(0); 
        display_name = c.getString(1); 
        hasPhone = c.getString(7); 

        if (hasPhone.equalsIgnoreCase("1")) 
         hasPhone = "true"; 
        else 
         hasPhone = "false" ; 

        if (Boolean.parseBoolean(hasPhone)) 
        { 
         Cursor phones = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
         while (phones.moveToNext()) 
         { 
          int indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE); 
          String phoneType = phones.getString(indexPhoneType); 

          phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

          String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 

          if (colorcounter < 5) 
          { 
           color_string =Color.parseColor(colorcounter_array[colorcounter]); 
           colorcounter++; 
          } else { 
           colorcounter = 0; 
           color_string =Color.parseColor(colorcounter_array[colorcounter]); 
           colorcounter++; 
          } 
          contactWrap.add(new ContactsWrapper(contactId, display_name, phoneNumber,lookupKey,false,color_string)); 
         } 
//      map.put(contactId, new ArrayList<ContactsWrapper>(contactWrap)); 
         phones.close(); 
        } 
       } catch (Exception e) { 

        e.printStackTrace(); 
       } 
      } 
      controller.contactWrapper = contactWrap; 
     } 
     catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     constants.dismissDialog(); 

     adapter = new ContactsAdapter(cntx); 
     contactsList.setAdapter(adapter); 
    } 

} 

的代碼,這是我接觸的包裝類

public class ContactsWrapper { 

private long contactId; 
private String displayName,displayNumber,lookUp; 
public boolean checked = true; 
int color_string; 

public ContactsWrapper(long contactId, String displayName, String displayNumber, String lookUp, boolean checked,int color_string) { 
    // TODO Auto-generated constructor stub 
    this.contactId = contactId; 
    this.displayName = displayName; 
    this.displayNumber = displayNumber; 
    this.lookUp = lookUp; 
    this.checked = checked; 
    this.color_string =color_string; 
} 

public String getLookUp() { 
    return lookUp; 
} 

public int getColor_string() { 
    return color_string; 
} 

public boolean isChecked() { 
    return checked; 
} 

public long getContactId() { 
    return contactId; 
} 

public String getDisplayName() { 
    return displayName; 
} 

public String getDisplayNumber() { 
    return displayNumber; 
} 

public void setChecked(boolean checked) { 
    this.checked = checked; 
} 
} 
+1

<使用權限android:name =「android.permission.READ_CONTACTS」/> –

+0

看起來在這段代碼中聯繫人沒有按電話號碼排序。 – Deqing

相關問題