Logcat говорит «недопустимые данные столбца1»

Новый для потоковой передачи. Новое для SQL. Новое для получения контактной информации. Так что, конечно, я потерян. Если я правильно читаю этот logcat, это говорит мне, что либо: column data1 не существует, либо что я искал неправильную информацию. К сожалению, это был путь «учиться на моих ошибках», и я не могу понять этого. Любая помощь очень ценится.

Целью здесь является получение имени, номера телефона и электронной почты контакта (соответствующая информация по ID контакта).

Журнал:

06-22 21:15:44.700: E/AndroidRuntime(1662): FATAL EXCEPTION: Thread-120 06-22 21:15:44.700: E/AndroidRuntime(1662): java.lang.IllegalArgumentException: Invalid column data1 06-22 21:15:44.700: E/AndroidRuntime(1662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:167) 06-22 21:15:44.700: E/AndroidRuntime(1662): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137) 06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366) 06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentResolver.query(ContentResolver.java:372) 06-22 21:15:44.700: E/AndroidRuntime(1662): at android.content.ContentResolver.query(ContentResolver.java:315) 06-22 21:15:44.700: E/AndroidRuntime(1662): at sat.tuts4mobile.customlistview.ContactDetails$1.run(ContactDetails.java:53) 06-22 21:15:44.700: E/AndroidRuntime(1662): at java.lang.Thread.run(Thread.java:856) 

Код (он вытаскивает информацию для ID контакта):

 import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.widget.TextView; /** * Created by Pete on 6/19/13. */ public class ContactDetails extends Activity { TextView tvContactName, tvPhoneNum, tvPhoneType, tvPhoneFull, tvEmailAdd, tvEmailType, tvEmailFull, tvAddress, tvAddType, tvAddFull; String contactId, contactName, phoneType, phoneFull, phoneNum1, emailAdd, emailType, emailFull, address, addType, addFull; //Contact List query arguments Uri uri; String[] projection, selectionArgs; String selection, sortOrder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contactinfo); initialize(); contactId = getIntent().getStringExtra("contactId"); contactName = getIntent().getStringExtra("contactName"); new Thread(new Runnable() { @Override public void run() { uri = ContactsContract.Contacts.CONTENT_URI; projection = new String[] { ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; selection = ContactsContract.Data.CONTACT_ID + " = " + contactId + " AND " + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'"; selectionArgs = null; sortOrder = null; // Create cursor searching for data associated with contactId if (contactId != null) { // Return all the PHONE data for the contact Cursor cursor = getContentResolver().query( uri, projection, selection, selectionArgs, sortOrder); //Get the indexes of the required columns while (cursor.moveToNext()) { // Extract the name contactName = cursor.getString( cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); tvContactName.setText(contactName); // Extract the phone number phoneFull = cursor.getString( cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } tvPhoneFull.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub tvPhoneFull.setText(phoneFull); } }); cursor.close(); } } }).start(); new Thread(new Runnable() { @Override public void run() { uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI; projection = null; selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId + " AND " + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE + "'"; selectionArgs = null; sortOrder = null; Cursor emailCursor = getContentResolver().query( uri, projection, selection, selectionArgs, sortOrder); while (emailCursor.moveToNext()) { // Extract email address emailFull = emailCursor.getString( emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); } tvPhoneFull.post(new Runnable() { @Override public void run() { tvEmailFull.setText(emailFull); } }); emailCursor.close(); } }).start(); } public void initialize() { tvContactName = (TextView)findViewById(R.id.tvContactName); tvPhoneNum = (TextView)findViewById(R.id.tvPhoneNum); tvPhoneType = (TextView)findViewById(R.id.tvPhoneType); tvPhoneFull = (TextView)findViewById(R.id.tvPhoneFull); tvEmailAdd = (TextView)findViewById(R.id.tvEmailAdd); tvEmailType = (TextView)findViewById(R.id.tvEmailType); tvEmailFull = (TextView)findViewById(R.id.tvEmailFull); tvAddress = (TextView)findViewById(R.id.tvAddress); tvAddType = (TextView)findViewById(R.id.tvAddType); tvAddFull = (TextView)findViewById(R.id.tvAddFull); } } 

Чтобы получить номера телефонов, запросите Phone.CONTENT_URI и Phone.NUMBER в свою проекцию.

Чтобы получить адреса электронной почты, запросите адрес электронной Email.CONTENT_URI и запросите адрес электронной Email.DATA в своей проекции.

Любой из них также позволит вам включать Contacts.DISPLAY_NAME в вашу проекцию, так как некоторые общие столбцы, подобные этим, автоматически объединяются.

Хотя я ранее не использовал эти данные по ID, я считаю, что ваше предложение where должно быть Phone.CONTACT_ID + " = " + contactId и Email.CONTACT_ID + " = " + contactId соответственно. См. Раздел Как получить номер телефона для контактов в Android для получения дополнительной информации.

Заменяя ContactsContract.CommonDataKinds.Phone.NUMBER с ContactsContract.PhoneLookup.NORMALIZED_NUMBER может помочь. Logcat говорит, что имя столбца «data1» недействительно.

Intereting Posts
Android crash /system/lib/libhwui.so Индексирование алфавита в Listview. Игнорирование индексации индексов Измените цвет фона списка ListView, но сохраните стиль селектора по умолчанию? Лучшие практики разработки более крупных приложений на Android Android ubuntu HOME определен, но не смог найти файл .ini Android-браузер: программно изменять сфокусированное входное значение Контекстное меню и устройства с сенсорным экраном Избегайте передачи null в качестве корня представления (необходимо разрешить параметры макета на корневом элементе раздутого макета) Анимация в панели уведомлений Пользовательский вид Где я должен глобально хранить / кэшировать данные, необходимые для всего жизненного цикла приложения? Проблемы с mTextEditorWatcher на Android Несколько зависимых андроидных проектов в eclipse Как установить цвет текста веб-обозревателя в android Лучший способ разработки простого приложения для видеочата для Android и iOS Была ли установлена ​​поддержка AAC + на всех телефонах Android?