2010-06-27 32 views
9

मैं एक ऐसा एप्लिकेशन लिख रहा हूं जो एंड्रॉइड फोन के सिम कार्ड में संपर्क लिखता है। मैं उस बिंदु पर फंस गया हूं जहां फोन नंबर जोड़ा गया है: कोई अपवाद किसी स्पष्ट कारण के साथ नहीं होता है।एंड्रॉइड: एसडीके का उपयोग कर सिम में संपर्क कैसे जोड़ें?

यहां कोड का एक स्निपेट है।

import android.app.Activity; 
import android.content.ContentResolver; 
import android.content.ContentUris; 
import android.content.ContentValues; 
import android.provider.ContactsContract.RawContacts; 
import android.provider.ContactsContract.Data; 
import android.provider.ContactsContract.RawContactsEntity; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.CommonDataKinds.StructuredName; 
import android.provider.ContactsContract.RawContacts.Entity; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.TextView; 
[...] 
try{ 
      // add a row to the RawContacts table 
    ContentValues values = new ContentValues(); 
    values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim"); 
    values.put(RawContacts.ACCOUNT_NAME, "SIM"); 
    Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 

      // get the ID of the newly-added line 
    long rawContactId = ContentUris.parseId(rawContactUri); 

      // add a "name" line to the Data table, linking it to the new RawContact 
      // with the CONTACT_ID column 
    values.clear(); 
    values.put(Data.RAW_CONTACT_ID, rawContactId); 
    values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
    values.put(StructuredName.DISPLAY_NAME, "Name"); 
    cr.insert(Data.CONTENT_URI, values); 
      // this insert succeeds 

      // add a "phone" line to the Data table, linking it to the new RawContact 
      // with the CONTACT_ID column 
    values.clear(); 
    values.put(Data.CONTACT_ID, rawContactId); 
    values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
    values.put(Phone.NUMBER, "+12345678901"); 
    values.put(Phone.TYPE, Phone.TYPE_MOBILE); 
    cr.insert(Data.CONTENT_URI, values); 
      // this insert fails with a NullPointerException 
} 
catch(Exception e){ 
    String xx=e.toString(); 
    System.out.println(xx); 
} 

ऐप्लिकेशन अनुमतियां android.permission.READ_CONTACTS और android.permission.WRITE_CONTACTS है।

फोन नाम के साथ एक संपर्क दिखाता है लेकिन कोई फोन नहीं (आकस्मिक रूप से, सामान्य यूआई परिणामों का उपयोग करके उस संपर्क में फोन जोड़ना, नाम और फोन के साथ एक नया संपर्क जोड़ा जा रहा है, और केवल नाम के साथ पुराना संपर्क) ।

कोई विचार क्यों तीसरा सम्मिलन (डेटा तालिका में दूसरा) विफल रहता है, जबकि 2 पिछले वाले (रॉकंटैक्ट्स में 1 और डेटा में 1) सफल होते हैं?

+0

हटाने में लायक हो सकता है यदि आप अपवाद स्टैक ट्रेस भी पोस्ट करते हैं तो यह वास्तव में मदद करेगा – ognian

+1

आपका मतलब है, कैच स्टेटमेंट में ब्रेकपॉइंट डालना और स्टैक चिपकाना जब ब्रेकपॉइंट मारा जाता है तो पता लगाएं (यानी, अपवाद पकड़ा गया है)? क्या आप देख सकते हैं कि किस फ़ंक्शन ने अपवाद फेंका? हालांकि , Data.RAW_CONTACT_ID हल के साथ Data.CONTACT_ID की जगह। – user377486

उत्तर

2

मैं अपने सिस्टम पर इस एक दोहराया है प्रतिस्थापित किया जाना है, लेकिन के रूप में मोबाइल restart.This का मतलब संपर्कों अस्थायी सिम में बचत कर रहे हैं संपर्क के रूप में जल्द ही मिट हो मोबाइल का क्या यह आपके पक्ष में हो रहा है या मुझे कुछ याद आ रहा है। मैं 3 जी सिम का उपयोग कर रहा हूँ।

सादर

+1

हाय रोहित। असल में वही होता है। जाहिर है, स्टार्टअप पर सिम फोनबुक के साथ रॉक कॉन्टैक्ट्स टेबल को सिंक किया गया है, लेकिन इसे एक्सेस करना वास्तविक सिम फोनबुक तक पहुंच के समान नहीं है। मैं जानना चाहता हूं कि यह कैसे करें, या कम से कम सिम फोनबुक और RawContacts के बीच एक resync कैसे ट्रिगर करें ... – user377486

+0

क्या आपको इसका समाधान मिला? – UnknownJoe

4
values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim"); 

anddroid? मैंने बाकी को नहीं देखा, लेकिन 'डी'

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