클래스를 만들려고하는데 그 필드는 연락처 정보 (이름, 주소 등)입니다. 나는 여러 연락처를 만든 에뮬레이터에서 연락처 커서의 데이터 열 4가 잘못되었습니다.
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를 만듭니다. 그것을 실행할 때, 예외 메시지를 던집니다. 메시지 "invalid column data4"입니다.
"data4"는 ContactsContract.CommonDataKinds.StructuredPostal.STREET 상수의 값입니다. 그러나 DISPLAY_NAME에 대해서만 쿼리하면 문제없이 처리됩니다.
나는이 연락처에는 주소가 없다는 것을 알고 있지만 많은 (실제) 전화 연락처에는 주소가 없으므로 응용 프로그램이 단지 충돌로 인해 충돌하지 않는다는 것을 알고 있습니다.
내가 뭘 잘못하고 있니?
2.0 이하의 에뮬레이터를 사용하고 있습니까? api 4 이하는 이러한 구조화 된 주소 필드를 포함하지 않았습니다. – Guykun
대상이 2.2, 에뮬레이터가 3입니다. 대신 ContactsContract.CommonDataKinds를 사용해야합니까? 아니면 더 최신 클래스 (2.2/API8 내)가 있습니까? – Frank