0

我正在显示所有联系人列表,我已经使用了 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();
                }
            }
        }
    }

}
4

1 回答 1

0

1)您必须onProgressUpdate()覆盖AsyncTask。在那里你可以更新你的progresDialog。

2)readContacts()进入 GetContact 类

3)您必须在循环publishProgress()中的某处调用以通知进度已更新并将被调用。readContacts() onProgressUpdate()

于 2013-04-23T07:48:07.727 回答