0

我正在开发一个 android 项目,我正在尝试使用 AutoCompleteEditText 并绑定联系人的 ArrayAdapter。但我在返回一系列联系人时遇到问题。

下面是我用来检索联系人和显示名称的代码。

public ArrayList<String> getPhoneNumbersAndContactNames()
    {
        ArrayList<String> contacts = new ArrayList<String>();
        try
        {
            ContentResolver contentResolver = context.getContentResolver();

            Uri uri = Data.CONTENT_URI;
            String[] projection = new String[] {PhoneLookup._ID, PhoneLookup.DISPLAY_NAME, PhoneLookup.NUMBER};
            String selection = "*";
            Cursor cursor = contentResolver.query(uri, projection, selection, null, null);
            if (cursor.moveToFirst())
            {
                contacts.add(cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)));
            }
        }
        catch (SQLiteException ex)
        {
            Log.d("Database All Contacts Exception", ex.toString());
        }
        catch (Exception ex)
        {
            Log.d("Get All Contacts Exception", ex.toString());
        }
        return contacts;
    }

在上面的代码中,我得到了异常:

IllegalArgumentException: Invalid column number

下面是我尝试将数组列表绑定到自动完成编辑文本的方式。

txtPhoneNumberOrContact = (AutoCompleteTextView)findViewById(R.id.call_blacklist_txtPhoneNumberContactName);

ArrayList<String> contacts = common.getPhoneNumbersAndContactNames();

ArrayAdapter<String> contactAdapter = 
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, 
                contacts);

txtPhoneNumberOrContact.setAdapter(contactAdapter);

我无法弄清楚为什么在尝试检索要添加到 ArrayList 的联系人列表时出现异常。

感谢您的任何帮助,您可以提供。

4

1 回答 1

0

使用 other selectionnot"*"但是:" = ?"

在我的项目中,我使用了这个对我有用的流程:

Map<String, String> contactDataMap = new HashMap<String, String>();

    ContentResolver cr = context.getContentResolver();

    Uri contactData = data.getData();       
    Cursor cursor =  cr.query(contactData, null, null, null, null);
    cursor.moveToFirst();
    String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
    String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

    contactDataMap.put(NAME, (name != null)?name:"");


    if (Integer.parseInt(cursor.getString(
            cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
        Cursor pCur = cr.query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                                null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                                new String[]{id},
                                null);

        while (pCur.moveToNext()) {
            String number = pCur.getString(pCur.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));

            contactDataMap.put(PHONE, (number != null)?number:"");
            break; // ? we want only 1 value
        } 
        pCur.close();
    }

在这里,您填写contactDataMap名称keyphone number

于 2013-04-28T18:46:45.693 回答