使用自动填充textview与联系人电话号码

时间:2012-01-27 05:10:14

标签: android autocomplete sms android-contacts phone-number

我正在为联系人电话号码制作我的edittext字段自动填充功能。我知道如何从数据库中获取联系人并在文本字段中显示它们,但我需要它们自动完成,只是因为用户想要在文本字段中键入名称。我理解如何让数组自动完成以及背后的整个理论。但是如何从电话联系中获取是很困难的。我已经看过许多教程以及关于堆栈溢出的各种问题,但仍然有点难过。代码snippit会有所帮助。

public class MyContacts extends Activity {

    AutoCompleteTextView txtPhoneNo;

    public ArrayList<String> c_Name = new ArrayList<String>();
    public ArrayList<String> c_Number = new ArrayList<String>();
    String[] name_Val = null;
    String[] phone_Val = null;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        txtPhoneNo = (AutoCompleteTextView) findViewById(R.id.txtPhoneNo);

    }

    Uri contacts = Uri.parse("content://icc/adn");
    ContentResolver cr = getContentResolver();

    Cursor managedCursor1 = cr.query(contacts, null, null, null, null);
    {
        if (managedCursor1.moveToFirst()) {

            String contactname;
            String cphoneNumber;

            int nameColumn = managedCursor1.getColumnIndex("name");
            int phoneColumn = managedCursor1.getColumnIndex("number");

            Log.d("int Name", Integer.toString(nameColumn));
            Log.d("int Number", Integer.toString(phoneColumn));

            do {
                // Get the field values
                contactname = managedCursor1.getString(nameColumn);
                cphoneNumber = managedCursor1.getString(phoneColumn);
                if ((contactname != " " || contactname != null)
                        && (cphoneNumber != " " || cphoneNumber != null)) {

                    c_Name.add(contactname);
                    c_Number.add(cphoneNumber);
                }

            } while (managedCursor1.moveToNext());
        }
        name_Val = (String[]) c_Name.toArray(new String[c_Name.size()]);
        phone_Val = (String[]) c_Number.toArray(new String[c_Name.size()]);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, name_Val);
        txtPhoneNo.setAdapter(adapter);
    }
}

我的代码......没有编译错误但仍无法正常工作

2 个答案:

答案 0 :(得分:3)

最好是获取联系人并将其存储在ArrayList中。然后,您可以将ArrayList与AutoComplete TextView绑定。当用户键入AutoComplete TextView时,剩下的部分就可以轻松过滤ArrayList。

<强>更新

您可以使用contact_namecontact_number的getter-setter创建一个POJO类。然后创建List<POJO> list = new ArrayList<POJO>();。然后,只需使用list

将contact_name和contact_number添加到POJO
POJO pojo_obj = new POJO();
pojo_obj.setcontact_name(contactname);
pojo_obj.setcontact_number(cphoneNumber);
list.add(pojo_obj);

最后将此list设置为Adapter

然后在Adapter类中,您可以使用

将其设置为TextView
list.get(position).getcontact_name();
list.get(position).getcontact_number();

答案 1 :(得分:0)

我认为您正在SDK中进行测试。 SDK没有SIM卡,因此无法使用。将.APK放入手机,然后重试。它应该像魅力一样工作。