Logcat 显示“无效的列数据 1"; [英] Logcat says "invalid column data1"

查看:24
本文介绍了Logcat 显示“无效的列数据 1";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

线程的新手.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 + " = " + contactIdEmail.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆