
我有这些代码基本上使用ListVIEw来显示联系人列表中的名称,我想在单击每个单一名称时获取他们的电话号码:
final ContentResolver cr = getContentResolver();final Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);myCursorAdapter = new SimpleCursorAdapter(this, R.layout.List_item, c, new String[] {ContactsContract.Contacts.disPLAY_name}, new int[]{R.ID.TVRow}, 0);myPhoneList.setAdapter(myCursorAdapter);myPhoneList.setonItemClickListener(new AdapterVIEw.OnItemClickListener(){ @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID){ c.movetoposition(position); Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)), Toast.LENGTH_SHORT).show(); }});在onItemClick方法中
GetColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)返回-1,因此我无法使用此方法获取电话号码.
我还尝试打印出光标c的所有列,它返回34列,但唯一与电话号码相关的列是HasPhoneNumber.
那么问题在哪里,我该如何解决?谢谢!
更新版本,其中传递给构造myCursorAdapter的String数组已更改:
final ContentResolver cr = getContentResolver(); final Cursor c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); myCursorAdapter = new SimpleCursorAdapter(this, R.layout.List_item, c, new String[] {ContactsContract.CommonDataKinds.Phone.NUMBER}, new int[]{R.ID.TVRow}, 0); myPhoneList.setAdapter(myCursorAdapter); myPhoneList.setonItemClickListener(new AdapterVIEw.OnItemClickListener(){ @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID){ c.movetoposition(position); Toast.makeText(getApplicationContext(), c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)), Toast.LENGTH_SHORT).show(); } });我想更新后的代码会在ListVIEw中显示电话号码,但我收到一条错误,说“列’data1’不存在”.
解决方法:
ContactsContract AndroID API在“数据”表中存储有关电话号码等联系人的数据,而不是“联系人”表.
仔细阅读:https://developer.android.com/reference/android/provider/ContactsContract.html.
更新 – 这是您的代码的固定版本(未经测试):
final ContentResolver cr = getContentResolver();String[] projection = new String[] {Contacts.disPLAY_name, Phone.NUMBER};final Cursor c = cr.query(Data.CONTENT_URI, projection, null, null, null);myCursorAdapter = new SimpleCursorAdapter(this, R.layout.List_item, c, new String[] {Phone.NUMBER}, new int[]{R.ID.TVRow}, 0);myPhoneList.setAdapter(myCursorAdapter);myPhoneList.setonItemClickListener(new AdapterVIEw.OnItemClickListener(){ @OverrIDe public voID onItemClick(AdapterVIEw<?> parent, VIEw vIEw, int position, long ID){ c.movetoposition(position); Toast.makeText(getApplicationContext(), c.getString(1), Toast.LENGTH_SHORT).show(); }}); 总结 以上是内存溢出为你收集整理的Android从联系人列表中获取电话号码全部内容,希望文章能够帮你解决Android从联系人列表中获取电话号码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)