2013-06-22 6 views
5

थ्रेडिंग के लिए नया। एसक्यूएल के लिए नया। संपर्क जानकारी प्राप्त करने के लिए नया। तो निश्चित रूप से मैं खो गया हूँ। अगर मैं इस लॉगकैट को सही तरीके से पढ़ रहा हूं, तो यह मुझे बता रहा है कि या तो: कॉलम डेटा 1 मौजूद नहीं है, या मैं गलत जानकारी ढूंढ रहा हूं। दुर्भाग्य से, यह सीखने के मार्ग "मेरी गलतियों से सीखना" रहा है और मैं इसे एक नहीं समझ सकता। किसी भी प्रकार के मदद की बहुत सराहना की जाएगी।लॉगकैट कहता है "अवैध कॉलम डेटा 1"

यहां लक्ष्य का नाम, फोन नंबर और संपर्क का ईमेल प्राप्त करना है (संपर्क आईडी द्वारा मिलान जानकारी)।

प्रवेश करें:

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) 

संहिता (यह संपर्क आईडी 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); 
    } 
} 
+0

आप यह बताना चाहते हैं कि यह कोड पूरा करने का प्रयास कर रहा है। साथ ही, एक बार जब आप इस समस्या को पार कर लेंगे, तो आप 'tvContactName.setText (contactName) पर क्रैश हो जाएंगे;', जैसा कि आप पृष्ठभूमि थ्रेड में यह काम कर रहे हैं। एक 'कर्सर लोडर', या शायद 'AsyncTask' का उपयोग करने पर विचार करें, क्योंकि दोनों बेहतर थ्रेडिंग-और-यूआई-अपडेट दृष्टिकोण प्रदान करते हैं। – CommonsWare

+0

वहां सिर के लिए धन्यवाद। संपादन ओपी अब – Psest328

उत्तर

17

फोन नंबर, क्वेरी Phone.CONTENT_URI पुनः प्राप्त करने और अपने प्रक्षेपण में Phone.NUMBER शामिल करने के लिए।

ईमेल पते पुनर्प्राप्त करने के लिए, Email.CONTENT_URI पर क्वेरी करें और अपने प्रक्षेपण में Email.DATA पूछें।

उन लोगों में से किसी को भी, के रूप में कुछ सामान्य कॉलम कि जैसे अपने आप में शामिल हो गए हैं आप अपने प्रक्षेपण में Contacts.DISPLAY_NAME शामिल करने के लिए के रूप में अच्छी तरह से की अनुमति देगा।

जबकि मैं पहले आईडी के आधार पर इस डेटा को पुनः प्राप्त नहीं किया है, मुझे लगता है कि लगता है कि आपके "जहां खंड" Phone.CONTACT_ID + " = " + contactId और Email.CONTACT_ID + " = " + contactId क्रमशः होगा। अधिक के लिए How to get contacts' phone number in Android देखें।

+0

ने आपके द्वारा जो भी कहा है उससे मिलान करने के लिए चयन को बदल दिया है, फिर भी एक ही त्रुटि हो रही है – Psest328

+0

@WizardKnight: आपको नहीं पता कि आपको क्या कहना है, क्षमा करें। – CommonsWare

+0

कोई चिंता नहीं। आपने वास्तव में बहुत मदद की। मुझे संदेह है कि कुछ करीबी परीक्षा में एक टाइपो कहीं मिलेगा। धन्यवाद फिर से – Psest328

0

ContactsContract.CommonDataKinds.Phone.NUMBERContactsContract.PhoneLookup.NORMALIZED_NUMBER के साथ बदलकर मदद कर सकता है। लॉगकैट का कहना है कि कॉलम नाम "डेटा 1" अमान्य है।

संबंधित मुद्दे