Если у вас есть rawContactId, вам не нужно многократный запрос.У вас может быть один запрос с Data.CONTENT_URI в качестве uri и с выбором в вашем rawContactId.
Вы должны зацикливаться с результирующим курсором, чтобы прочитать информацию.Чтобы узнать, в каком столбце вы должны увидеть для данной строки в таблице данных, вам нужно проверить MIMETYPE
РЕДАКТИРОВАТЬ
private interface DataQuery {
public static final String[] PROJECTION = new String[] { Data._ID, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3, };
public static final int COLUMN_ID = 0;
public static final int COLUMN_MIMETYPE = 1;
public static final int COLUMN_DATA1 = 2;
public static final int COLUMN_DATA2 = 3;
public static final int COLUMN_DATA3 = 4;
public static final int COLUMN_PHONE_NUMBER = COLUMN_DATA1;
public static final int COLUMN_PHONE_TYPE = COLUMN_DATA2;
public static final int COLUMN_GIVEN_NAME = COLUMN_DATA2;
public static final int COLUMN_FAMILY_NAME = COLUMN_DATA3;
public static final String SELECTION = Data.RAW_CONTACT_ID + "=?";
}
final Cursor c = resolver.query(Data.CONTENT_URI, DataQuery.PROJECTION, DataQuery.SELECTION, new String[] { String.valueOf(rawContactId) }, null);
try {
while (c.moveToNext()) {
final long id = c.getLong(DataQuery.COLUMN_ID);
final String mimeType = c.getString(DataQuery.COLUMN_MIMETYPE);
uri = ContentUris.withAppendedId(Data.CONTENT_URI, id);
if (mimeType.equals(StructuredName.CONTENT_ITEM_TYPE)) {
final String oldLastName = c.getString(DataQuery.COLUMN_FAMILY_NAME);
final String oldFirstName = c.getString(DataQuery.COLUMN_GIVEN_NAME);
//store them where you need
} else if (mimeType.equals(Phone.CONTENT_ITEM_TYPE)) {
final int type = c.getInt(DataQuery.COLUMN_PHONE_TYPE);
final String cellPhone = c.getString(DataQuery.COLUMN_PHONE_NUMBEIR);
//store them where you need
}
}
} // while
} finally {
if (c!=null) c.close();
}
Пожалуйста, учтите, что я сделалНе проверяйте код: у меня нет компилятора здесь.Я надеюсь, что это будет полезно в любом случае