【问题标题】:Retrieving phone number from contact id : android从联系人 ID 中检索电话号码:android
【发布时间】:2012-01-10 15:39:25
【问题描述】:

从我的列表视图中单击联系人姓名后,我正在尝试获取联系人数据。根据下面的代码,我可以成功记录我的联系人的 ID,但还没有设法使用 ContactsContract 来检索数据。最好的方法是什么? (已尝试Retrieve Contact Phone Number From URI in Android 无济于事)

编辑 2:固定代码,现在可以使用

public void onCreate(Bundle savedInstanceState)
    {
        Log.v(TAG, "Activity State: onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contact_manager);
        mContactList = (ListView) findViewById(R.id.contactList);
        populateContactList();

        mContactList.setOnItemClickListener(new OnItemClickListener() {
            String strid = Long.toString(id);               
            Cursor result = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts._ID +" = ?", new String[]{strid}, null);
            if (result.moveToFirst()) { 
                 Cursor c = getContentResolver().query(Data.CONTENT_URI,
                          new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
                          Data.RAW_CONTACT_ID + "=?" + " AND "
                                  + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
                          new String[] {String.valueOf(strid)}, null);
                 if(c.moveToFirst()){
                     int phoneColumn = c.getColumnIndex("data1");
                     String phoneNumber = c.getString(phoneColumn);
                     Log.d("DATA",phoneNumber);
                 }
            }
        });
    }

编辑 1:忘记了一些重要的东西。该代码改编自 Android 开发网站的 ContactManager 示例。

/**
 * Populate the contact list based on account currently selected in the account spinner.
 */
private void populateContactList() {
    // Build adapter with contact entries
    Cursor cursor = getContacts();
    String[] fields = new String[] {
            ContactsContract.Data.DISPLAY_NAME
    };
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
            fields, new int[] {R.id.contactEntryText});
    mContactList.setAdapter(adapter);
}

/**
 * Obtains the contact list for the currently selected account.
 *
 * @return A cursor for for accessing the contact list.
 */
private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = null;
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

【问题讨论】:

  • 那么你从那个问题中尝试过什么?
  • 您是如何将 ID 存储在列表中的? ID 是否在联系人表中?原始联系人表?可以贴出populateContactList 的代码吗?

标签: android contacts


【解决方案1】:

假设您有一个有效的contactID,您可以这样做:

Cursor result = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, 
         ContactsContract.Contacts._ID +" = ?", 
         new String[]{contactID}, null);      
if (result.moveToFirst()) {

    for(int i=0; i< result.getColumnCount(); i++){
        Log.i("CONTACTSTAG", result.getColumnName(i) + ": "
        + result.getString(i));
    }         
}

您必须将 ContactsContract.Contacts.CONTENT_URI 和 where 子句更改为您正在查询的表。上面的代码会打印出一堆关于联系人的一般信息。

【讨论】:

  • 嘿,谢谢!从那里我能够查询数据表并找到我需要的东西。使用新查询更新代码。
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多