2011-03-11 9 views
19

मेरे पास "डंप" उपयोगिता है जिसका उपयोग मैं संपर्क नियंत्रण का अध्ययन करने के लिए कर रहा हूं क्योंकि मुझे इसे दस्तावेज़ में काफी कुछ नहीं मिला है। जब मैं संपर्कों को डंप करता हूं तो यह तालिका में 263 रिकॉर्ड की गणना करता है, हालांकि, मेरे डिवाइस पर संपर्क अनुप्रयोग सूचीबद्ध है कि मेरे पास 244 ("244 संपर्क प्रदर्शित करना" है)संपर्क बनाम कच्चे संपर्कों में अंतर क्या है?

क्या कोई विसंगति समझा सकता है?

मेरा स्प्रिंट एलजी के संपर्क ऐप में प्रत्येक खाते के लिए डिस्प्ले विकल्प हैं जो मैं सिंक करता हूं और मैं अंदर गया हूं और उन सभी की जांच की है, इसलिए कोई फ़िल्टरिंग नहीं होनी चाहिए।

मुख्य यूआरआई कि मैं उपयोगिता में उपयोग कर रहा हूँ है:

Uri uriRawContacts = ContactsContract.RawContacts.CONTENT_URI; 
    String[] projection = new String [] { 
      ContactsContract.RawContactsEntity._ID, 
      ContactsContract.RawContactsEntity.CONTACT_ID, 
      ContactsContract.RawContactsEntity.DELETED, 
      ContactsContract.RawContactsEntity.AGGREGATION_MODE, 
    }; 
    Cursor cursorRaw = cr.query(uriRawContacts, projection, null, null, null); 
    DumpCursor.dumpAnyCursor(getApplicationContext(), "RawContacts", cr, cursorRaw, ","); 

इसके बाद (प्रत्येक _ id के लिए ऊपर क्वेरी में):

   long rawContactId = Long.parseLong(anyCursor.getString(anyCursor.getColumnIndex(RawContacts.CONTACT_ID))); 

       Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 
       Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); 

       Log.d(TAG, "rawContactUri: " + rawContactUri.toString()); 
       Log.d(TAG, "entityUri: " + entityUri.toString()); 

       Cursor c = cr.query(entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null); 

मैं तो पहली क्वेरी के माध्यम से लूप, मेरे प्रक्षेपण में सभी कॉलम प्रदर्शित करें, फिर, पहली क्वेरी के लूप में _ID फ़ील्ड का उपयोग करके, मैं दूसरी क्वेरी जारी करता हूं और इसके सभी कॉलम डंप करता हूं। इस सवाल का जवाब यहाँ सुविधा के लिए स्थानांतरित से

बुलेट: अधिक विस्तृत विवरण के लिए संदर्भ का संदर्भ लें। अधिक विशेष रूप से, आपको एकत्रीकरण नियमों के बारे में पढ़ने के लिए प्रोत्साहित किया जाता है। रेफरी: Click here for the original cited text that follows

  • संपर्क डेटाबेस 3 टेबल संपर्क, कच्चे संपर्क, और डेटा में विभाजित है।
  • प्रत्येक तालिका में कॉलम (_ID) होता है जो एक ऑटो वृद्धिशील प्राथमिक
    कुंजी है।
  • डेटा तालिका फोन नंबर, मेल आईडी,
    पते आदि
  • बनाया वास्तविक संपर्क करने के लिए कच्चे संपर्क अंक की तरह सभी संपर्क जानकारी शामिल है। इसलिए संपर्क जोड़ने के दौरान कच्चे संपर्कों का उपयोग करें।
  • उपयोगकर्ता संपर्क तालिका में कोई डेटा नहीं जोड़ सकता है।
    तालिका में डेटा
    संपर्कों के एकत्रीकरण के कारण आंतरिक रूप से पॉप्युलेट किया गया है।

कारण अपने तर्क कुछ संपर्कों को के लिए काम किया है: _ id संपर्कों के लिए, कच्चे संपर्क एक ही रहता है जब तक वहाँ किसी भी संपर्क एकत्रीकरण जगह ले जा रहा है। आइए कहें कि आप दो नाम समान नाम एबीसी के साथ जोड़ते हैं। यहाँ कच्चे संपर्क वेतन वृद्धि दो बार जबकि संपर्कों वेतन वृद्धि केवल एक बार के रूप में इन दो संपर्कों के लिए _ id वजह से संपर्कों के एकत्रीकरण के लिए विलय कर दिया जाता है के लिए _ id

+0

अंतिम अनुमोदित संपादन गलत था। यदि आप मूल को पढ़ते हैं, तो आप लापता विराम चिह्न और 3 टेबल पर जोर देखेंगे। फिर वह उस संदर्भ का संदर्भ देता है जैसे "डेटा तालिका, 'संपर्क' में सभी शामिल हैं ..." आपने मूल लेखक के सही बयान संशोधित किए हैं। – mobibob

उत्तर

22

यह अंतर RawContacts की वजह से एकत्रीकरण के कारण Contacts के लिए विलय कर रही है राज करते हैं।

जब आप सूची प्रदर्शित करते हैं तो आप RawContacts पर संपर्क जोड़ते हैं। इसलिए गिनती अंतर।

Contacts, RawContacts और Datahere के बीच कुछ विवरण पाएं। भले ही सवाल एक अलग है, आप Contacts और RawContacts के बीच अंतर प्राप्त करने में सक्षम हो सकते हैं।

+1

सुपर उत्तर और +1। मुझे लगता है कि जानकारी पर्याप्त है कि मैं इस प्रश्न से छः गोलियों को रेफरी और ट्रांसफर करने जा रहा हूं। – mobibob

3

तीन तालिकाओं को आमतौर पर उनके अनुबंध वर्गों के नाम से संदर्भित किया जाता है। कक्षाएं सामग्री यूआरआई, स्तंभ नाम है, और स्तंभ मान टेबल द्वारा प्रयोग किया जाता के लिए स्थिरांक को परिभाषित:

ContactsContract.Contacts तालिका: - पंक्तियाँ कच्चे संपर्क पंक्तियों एकत्रित के आधार पर, अलग अलग लोगों का प्रतिनिधित्व।

ContactsContract.RawContacts तालिका: - पंक्तियों में किसी व्यक्ति के डेटा का सारांश होता है, जो उपयोगकर्ता खाते और प्रकार के लिए विशिष्ट होता है।

ContactsContract.Data तालिका: - पंक्तियों में कच्चे संपर्क, जैसे ईमेल पते या फोन नंबर के विवरण शामिल हैं।

अधिक जानकारी के लिए click

+0

मान लीजिए कि मैं उस आईडी को प्राप्त करना चाहता हूं जो ऐप्स चैट उद्देश्यों को खोलने के लिए उपयोग करता है, जैसे कि viber, मैं यह कैसे कर सकता हूं? उदाहरण के लिए, यदि Viber के पास संपर्क एक्स है, तो इसके लिए वाई आईडी है, जिसका उपयोग इस संपर्क के साथ चैट का इरादा खोलने के लिए किया जाता है: intent = new Intent (Intent.ACTION_VIEW, Uri.parse ("content://com.android.contacts/data/"+id)); intent.setPackage ("com.viber.voip"); –

+0

इस लिंक को देखें http://stackoverflow.com/a/35453979/4395114 –

+0

मुझे इसके लिए आवश्यक आईडी नहीं मिल रही है। क्या आप कृपया मदद कर सकते हैं? मैंने यहां इसके बारे में एक पोस्ट बनाई है: http://stackoverflow.com/q/35972329/878126 –

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