2013-04-23 3 views
0

모든 연락처 목록을 표시하고 있습니다. AsyncTask를 사용하여 진행률 업데이트 대화 상자를 표시하므로 사용자는 완료 시간이 얼마 남았는지 알 수 있습니다. 다음 코드가 있습니다. 진행 상황 업데이트 대화 상자를 표시하는 방법.모든 연락처 목록을 가져 오는 동안 asynctask의 진행률 업데이트 대화 상자가 표시됩니다.

코드

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    Cursor cur; 
    ContentResolver cr; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     cr = getContentResolver(); 
     cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, 
       null); 
     GetContact contact = new GetContact(); 
     contact.execute(cur); 
    } 

    class GetContact extends AsyncTask<Cursor, Void, Void> { 
     private ProgressDialog progress; 

     @Override 
     protected Void doInBackground(Cursor... params) { 
      // TODO Auto-generated method stub 
      System.out.println("value of param===================" 
        + params.length); 
      readContacts(); 
      return null; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      progress = ProgressDialog 
        .show(MainActivity.this, "", "Loding....."); 
     } 

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

    } 

    public void readContacts() { 
     // ContentResolver cr = getContentResolver(); 
     // Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
     // null, null, null); 
     System.out.println("value of cursor==================================" 
       + cur.getCount()); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur 
         .getColumnIndex(ContactsContract.Contacts._ID)); 
       String name = cur 
         .getString(cur 
           .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       if (Integer 
         .parseInt(cur.getString(cur 
           .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
        System.out 
          .println("name : ===================================" 
            + name + ", ID : " + id); 

        // get the phone number 
        Cursor pCur = cr.query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = ?", new String[] { id }, null); 
        while (pCur.moveToNext()) { 
         String phone = pCur 
           .getString(pCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         System.out 
           .println("phone++++++++++++++++++++++++++++++++++" 
             + phone); 
        } 
        pCur.close(); 

        // get email and type 

        Cursor emailCur = cr.query(
          ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Email.CONTACT_ID 
            + " = ?", new String[] { id }, null); 
        while (emailCur.moveToNext()) { 
         // This would allow you get several email addresses 
         // if the email addresses were stored in an array 
         String email = emailCur 
           .getString(emailCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
         String emailType = emailCur 
           .getString(emailCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 

         System.out.println("Email " + email + " Email Type : " 
           + emailType); 
        } 
        emailCur.close(); 

        // Get note....... 
        String noteWhere = ContactsContract.Data.CONTACT_ID 
          + " = ? AND " + ContactsContract.Data.MIMETYPE 
          + " = ?"; 
        String[] noteWhereParams = new String[] { 
          id, 
          ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE }; 
        Cursor noteCur = cr.query(
          ContactsContract.Data.CONTENT_URI, null, noteWhere, 
          noteWhereParams, null); 
        if (noteCur.moveToFirst()) { 
         String note = noteCur 
           .getString(noteCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE)); 
         System.out.println("Note " + note); 
        } 
        noteCur.close(); 

        // Get Postal Address.... 

        String addrWhere = ContactsContract.Data.CONTACT_ID 
          + " = ? AND " + ContactsContract.Data.MIMETYPE 
          + " = ?"; 
        String[] addrWhereParams = new String[] { 
          id, 
          ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE }; 
        Cursor addrCur = cr.query(
          ContactsContract.Data.CONTENT_URI, null, null, 
          null, null); 
        while (addrCur.moveToNext()) { 
         String poBox = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX)); 
         String street = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)); 
         String city = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)); 
         String state = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)); 
         String postalCode = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)); 
         String country = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
         String type = addrCur 
           .getString(addrCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)); 

         // Do something with these.... 

        } 
        addrCur.close(); 

        // Get Instant Messenger......... 
        String imWhere = ContactsContract.Data.CONTACT_ID 
          + " = ? AND " + ContactsContract.Data.MIMETYPE 
          + " = ?"; 
        String[] imWhereParams = new String[] { 
          id, 
          ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE }; 
        Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI, 
          null, imWhere, imWhereParams, null); 
        if (imCur.moveToFirst()) { 
         String imName = imCur 
           .getString(imCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA)); 
         String imType; 
         imType = imCur 
           .getString(imCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE)); 
        } 
        imCur.close(); 

        // Get Organizations......... 

        String orgWhere = ContactsContract.Data.CONTACT_ID 
          + " = ? AND " + ContactsContract.Data.MIMETYPE 
          + " = ?"; 
        String[] orgWhereParams = new String[] { 
          id, 
          ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE }; 
        Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI, 
          null, orgWhere, orgWhereParams, null); 
        if (orgCur.moveToFirst()) { 
         String orgName = orgCur 
           .getString(orgCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA)); 
         String title = orgCur 
           .getString(orgCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)); 
        } 
        orgCur.close(); 
       } 
      } 
     } 
    } 

} 

답변

0

1) 당신은 AsyncTaskonProgressUpdate()를 재정의해야합니다. 여기에서 progresDialog를 업데이트 할 수 있습니다.

2)가 업데이트되었습니다 그 진행 상황을 통지 getContact 같은 클래스

3) 당신은 당신의 readContacts()루프 어딘가에 publishProgress() 전화를해야으로 readContacts()를 이동하고 onProgressUpdate()가 호출됩니다.

+0

이미 doInbackground() 내부에서 readContact를 호출하고 있지만 모든 프로세스가 문제가 있다는 것을 알고 있습니다. 내 코드를 구현하는 방법은이 점에서 제안 할 수 있습니다. – Dilip

+0

3 번째 라인 덕분에 작동합니다. – Dilip

관련 문제