gpt4 book ai didi

android - 联系人游标中的列 data4 无效

转载 作者:行者123 更新时间:2023-11-30 03:56:30 24 4
gpt4 key购买 nike

我正在尝试创建一个类,它的字段是联系信息(姓名、地址等)。

  public class ContactObject {

private Activity actividad;
private Uri contactUri;`enter code here`
// variable para asegurarse que la consulta de contacto se realizó correctamente
private boolean isOK = true;

private String displayName;
private String givenName;
private String familyName;
private String region;
private String postcode;
private String city;
private String street;


public ContactObject(Activity actividad, Uri contactUri) {
super();
this.actividad = actividad;
this.contactUri = contactUri;

Cursor c = null;
try{
String[] selection = new String[]{
ContactsContract.CommonDataKinds.StructuredPostal.STREET,
ContactsContract.CommonDataKinds.StructuredPostal.CITY,
ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE,
ContactsContract.CommonDataKinds.StructuredPostal.REGION,
ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,
ContactsContract.Contacts.DISPLAY_NAME
};

c = actividad.getContentResolver().query(contactUri, selection,null, null, null);
if (c != null && c.moveToFirst()) {
this.street = c.getString(0);
this.city = c.getString(1);
this.postcode = c.getString(2);
this.region = c.getString(3);
this.givenName = c.getString(4);
this.familyName = c.getString(5);
this.displayName = c.getString(6);
}
}catch(Exception e){
CLog.e("peta constructor ContactObject: " + e.getMessage());
isOK = false;
}
}
// getters and setters
}



// code to launch contact picker
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);


// code to create the ContactObject
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_RESULT:
Uri uri = data.getData();

if (uri != null) {
ContactObject co = new ContactObject(actividad, uri);
String mensaje;
if (co.isOK()){
mensaje = "Contacto encontrado: " + co.getDisplayName();
}else{
mensaje = "error recuperando datos del contacto " + uri.toString();
}
CToast.mensajeLargo(mensaje, actividad.getApplicationContext());
}
}
}
}

在模拟器中我创建了几个联系人(只有名字和电话)。在测试应用程序中,我调用 contactPicker onResult 并使用联系人 uri 创建 ContactObject。当我执行它时,它抛出一个异常,它的消息是“无效的列 data4”。

据我收集,“data4”是常量 ContactsContract.CommonDataKinds.StructuredPostal.STREET 的值。但是,如果我只查询 DISPLAY_NAME,我可以毫无问题地获取它。

我知道这些联系人没有地址,但我的许多(实际)手机联系人都没有地址,应用程序不会因此而崩溃。

我做错了什么?

最佳答案

您使用的是什么内容 URI?

您的投影包含来自三个不同位置的列名:结构化邮政结构化名称联系人

您的错误表明您正在尝试获取表中没有该列名的列名。

特别是,我可以看到 ContactsContract.CommonDataKinds.StructuredPostal.STREET = "data4"。如果您的查询不是针对表 ContactsContract.DATA,您将会遇到错误。

您可能想回去查看 Contacts Provider 文档。

关于android - 联系人游标中的列 data4 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com