2010-06-23 3 views
1

J'ai Je suis confronté à un gros problème: Je ne peux pas ajouter de données à un contact existant :( I Je développe une application qui gère les contacts, je peux ajouter, supprimer ou modifier des contacts La création est ok, car je crée tous les types de données (même si elles sont vides) pour le contact (ce n'est pas un bon moyen, je Si je veux modifier ces données, je peux les trouver dans la base de données (avec Datas.CONTENT_URI) car elles existent déjà!Ajouter des données (numéro de téléphone, notes etc ...) à un contact existant (ANDROID 2.1)

Mais si je crée un nouveau contact avec l'application de contact ANDROID Lorsque vous essayez d'ajouter un nouveau numéro de téléphone, par exemple avec ma demande, je me trompe. ou :(

Voici mon code pour essayer d'ajouter le numéro de téléphone:

ContentValues contentValues = new ContentValues(); 

contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, pNewPhoneNumber.number); 
contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, pNewPhoneNumber.type); 
contentValues.put(ContactsContract.Data.CONTACT_ID, pContact.getContactId()); 

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(
    ContactsContract.Data.CONTENT_URI).withValues(contentValues).build()); 

try 
{ 
pContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
} 
catch (Exception e) 
{ 
     Context ctx = pContext.getApplicationContext(); 
     String txt = "Exception encoutered while inserting contact: " + e; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(ctx, txt, duration); 
     toast.show(); 
Log.e(TAG, txt); 
} 

Voici l'erreur:

06-23 09:21:54.030: ERROR/DatabaseUtils(111): Writing exception to parcel 
06-23 09:21:54.030: ERROR/DatabaseUtils(111): java.lang.NullPointerException 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:2206) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2096) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:101) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:1941) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProviderOperation.apply(ContentProviderOperation.java:211) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.SQLiteContentProvider.applyBatch(SQLiteContentProvider.java:200) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at com.android.providers.contacts.ContactsProvider2.applyBatch(ContactsProvider2.java:1960) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProvider$Transport.applyBatch(ContentProvider.java:169) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:167) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at android.os.Binder.execTransact(Binder.java:287) 
06-23 09:21:54.030: ERROR/DatabaseUtils(111):  at dalvik.system.NativeStart.run(Native Method) 

J'ai un problème de base de données, OK. Mais où ai-je tort?

Si vous savez comment résoudre ce problème: laissez-moi savoir :) Merci

Répondre

5

Je suppose que

contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ...); 

manque.

3

Merci beaucoup, cela fonctionne parfaitement. Je dois obtenir le rawid du contact et ensuite utiliser votre solution.

Voici le code source de travail:

ContentValues contentValues = new ContentValues(); 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, pContact.getContactRawId()); 
    contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
    contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, pNewPhoneNumber.number); 
    contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, pNewPhoneNumber.type); 

    ops.add(ContentProviderOperation.newInsert(
      ContactsContract.Data.CONTENT_URI).withValues(contentValues).build()); 

Merci encore;)

Questions connexes