Logcat 显示“无效的列数据 1"; [英] Logcat says "invalid column data1"
问题描述
线程的新手.SQL 新手.获取联系信息的新手.所以我当然迷路了.如果我正确阅读了这个 logcat,它会告诉我:列 data1 不存在,或者我正在寻找错误的信息.不幸的是,这是一条从错误中吸取教训"的学习之路,我无法弄清楚这一点.非常感谢任何帮助.
New to threading. New to SQL. New to getting Contact Info. So of course I'm lost. If I'm reading this logcat correctly, it's telling me that either: column data1 doesn't exist, or that I'm looking for the wrong info. Unfortunately, this has been a "learn from my mistakes" path of learning and I can't figure this one out. Any help is very much appreciated.
此处的目标是获取联系人的姓名、电话号码和电子邮件(按联系人 ID 匹配信息).
The goal here is to get the Name, Phone Number, and Email of the contact (matching info by contact 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 0 的信息):
Code (It's pulling info for contact ID 0):
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
.
To retrieve phone numbers, query Phone.CONTENT_URI
and include Phone.NUMBER
in your projection.
要检索电子邮件地址,请查询 Email.CONTENT_URI
并在您的投影中要求 Email.DATA
.
To retrieve email addresses, query Email.CONTENT_URI
and ask for Email.DATA
in your projection.
其中任何一个也允许您在投影中包含 Contacts.DISPLAY_NAME
,因为一些常见的列会自动加入.
Either of those will also allow you to include Contacts.DISPLAY_NAME
in your projection as well, as some common columns like that are automatically joined in.
虽然我之前没有通过 ID 检索过这些数据,但我相信您的where 子句"将是 Phone.CONTACT_ID + " = " + contactId
和 Email.CONTACT_ID + " =" + contactId
分别.请参阅如何在 Android 中获取联系人的电话号码以了解更多信息.
While I have not retrieved this data by ID before, I believe that your "where clause" would be Phone.CONTACT_ID + " = " + contactId
and Email.CONTACT_ID + " = " + contactId
respectively. See How to get contacts' phone number in Android for more.
这篇关于Logcat 显示“无效的列数据 1";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!