簡體   English   中英

想要從聯系人列表“ android”中選擇電話號碼

[英]want to pick phone number from contact list “android”

我想從聯系人列表中選擇電話號碼,我編寫此代碼以選擇電話號碼,但這會引發異常

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
            case CONTACT_PICKER_RESULT:
                Bundle extras = data.getExtras();
                Set<String> keys = extras.keySet();
                Iterator<String> iterate = keys.iterator();
                while (iterate.hasNext()) {
                    String key = iterate.next();
                    Log.v("R", key + "[" + extras.get(key) + "]");
                }
                Uri result = data.getData();
                Cursor c = getContentResolver().query(result,null,null,null,null);
                try {
                    c.moveToFirst();
                    String name = c
                            .getString(c
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    Log.i("name", name);
                    String contactId = c.getString(c
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    Log.i("Contact Id : ", contactId);
                    Cursor phones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = " + contactId, null, null);
                    final String[] contactNumbers = new String[phones
                            .getCount()];
                    int count = 0;
                    while (phones.moveToNext()) {
                        contactNumbers[count] = phones
                                .getString(phones
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        count++;
                    }
                    phones.close();

                    if (contactNumbers.length > 1 ) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        builder.setTitle("Call Number");
                        builder.setItems(contactNumbers, new OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                ContactActivity.roamNumber
                                        .setText(contactNumbers[which]);

                            }
                        });

                        builder.create().show();

                    } else {
                        ContactActivity.roamNumber
                        .setText(contactNumbers[0]);
                    }

                } finally {
                    c.close();
                }

                break;
            }

        } else {
            // gracefully handle failure
            Log.i("", "Warning: activity result not ok");
        }


    }

注意:當選擇任何Facebook聯系人為我提供號碼拋出異常時,我的手機與Facebook同步:

10-01 13:44:17.369: E/AndroidRuntime(9991): FATAL EXCEPTION: main
10-01 13:44:17.369: E/AndroidRuntime(9991): java.lang.RuntimeException: Failure delivering result ResultInfo{who=Contact, request=1001, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/543r3759-2D333B2D45513B2D373D41.1160i730738002/3838 flg=0x1 (has extras) }} to activity {com.xeno.callRoaming/com.xeno.callRoaming.XenoCallRoamingActivity}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2536)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread.access$2000(ActivityThread.java:117)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:965)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.os.Looper.loop(Looper.java:123)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread.main(ActivityThread.java:3687)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at java.lang.reflect.Method.invokeNative(Native Method)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at java.lang.reflect.Method.invoke(Method.java:507)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at dalvik.system.NativeStart.main(Native Method)
10-01 13:44:17.369: E/AndroidRuntime(9991): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.database.CursorWrapper.getString(CursorWrapper.java:135)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at com.xeno.callRoaming.ContactPickerActivity.onActivityResult(ContactPickerActivity.java:67)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:119)
10-01 13:44:17.369: E/AndroidRuntime(9991):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
10-01 13:44:17.369: E/AndroidRuntime(9991):     ... 11 more

問題是什么 ?

我解決問題使用此代碼:

Uri result = data.getData();

                Cursor c = getContentResolver().query(result, null, null, null,
                        null);
                Log.d("Row Count c", c.getCount() +"");
                Log.d("result", result +"");

                try {
                    c.moveToFirst();
                    String name = c
                            .getString(c
                                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    Log.i("name", name);

                    String contactId = c.getString(c
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    Log.i("Contact Id : ", contactId);
                    Cursor phoness = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = " + contactId, null, null);
                    Cursor phones = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
                            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME  +
                            " like ('"+name+"')", null, null);


                    if (phones.getCount() == 0) {
                        AlertDialog.Builder numbersBuilder = new AlertDialog.Builder(this);
                        numbersBuilder.setMessage("No Number Found ..!")
                        .setCancelable(true);
                        AlertDialog alert = numbersBuilder.create();
                        alert.show();
                        ContactActivity.roamNumber
                        .setText("");
                        break;
                    }

                    final String[] contactNumbers = new String[phones
                            .getCount()];
                    int count = 0;
                    while (phones.moveToNext()) {
                        contactNumbers[count] = phones
                                .getString(phones
                                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        count++;
                    }
                    phones.close();

                    if (contactNumbers.length > 1 ) {
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        builder.setTitle("Call Number");
                        builder.setItems(contactNumbers, new OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                ContactActivity.roamNumber
                                        .setText(contactNumbers[which]);

                            }
                        });

                        builder.create().show();

                    } else {
                        ContactActivity.roamNumber
                        .setText(contactNumbers[0]);
                     }


                } finally {
                    c.close();          
                      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM