从手机和sim卡Android读取所有联系人

从手机和sim卡Android读取所有联系人,android,android-contentprovider,Android,Android Contentprovider,编辑:::代码可以工作。这是Eclipse的一个问题,代码按预期在logcat中显示输出 安卓2.3.3 我对使用contentproviders很陌生。我只想尝试一个如何从我的手机中检索联系人的示例。我见过几个例子,但当我在三星手机上试用时,没有一个对我有效 这是我使用的代码 public class Class_Add_Contact extends Activity { @Override protected void onCreate(Bundle savedInsta

编辑:::代码可以工作。这是Eclipse的一个问题,代码按预期在logcat中显示输出

安卓2.3.3

我对使用contentproviders很陌生。我只想尝试一个如何从我的手机中检索联系人的示例。我见过几个例子,但当我在三星手机上试用时,没有一个对我有效

这是我使用的代码

public class Class_Add_Contact extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_add_contact);

        readContacts();    
    }

    private void readContacts() {
        // TODO Auto-generated method stub

        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null, null);

        while (cur.moveToNext()) {

            String name =cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));    
            String phoneNumber = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            System.out.println(name + "   " + phoneNumber);
            }
    }
}
代码看起来很好,但logcat中没有显示任何数字。有什么问题吗?

试试这个

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

while (cursor.moveToNext()) {
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    System.out.println(contactId + "   " + name);
}
cursor.close();

它返回联系人的姓名和id(id可能是联系人表的行号)

何时使用ContactsContract.contact以及何时使用ContactsContract.CommonDataTypes.Phone?这两个代码都有效。这只是Eclipse的一个问题。我认为ContactContract.CommonDataTypes可以帮助您插入新数据或对其进行更改(ProgramMaticali..)和ContactsContract.Contact只需将Contacts表作为常量返回即可。。这样,您将无法更改任何数据。@vamsichilla Correction!!不要注意我的第一句话。。ContactContract.CommonDataTypes保存联系人数据,如:照片、号码、电子邮件和所有此类数据。。ContactContract.Contacts保存contactId,即手机上显示的姓名。。因此,当您想要获取用户的电话号码时,请使用CommonDataTypes。。否则,如果您想插入、更新、删除联系人或仅选择显示的联系人姓名,请使用ContactContract.contact我使用的是gingerbread mobile,上面的代码没有显示sim卡联系人,只显示手机中保存的联系人是有错误还是我需要使用gingerbread的其他方法