2010-03-05 12 views
1

J'ai ce code pour la mise à jour:mise à jour ne fonctionne pas lorsque vous utilisez ContentResolver mettre à jour les groupes de contact

public Boolean update() { 
    try { 
    data.put(ContactsContract.Groups.SHOULD_SYNC, true); 

    ContentResolver cr = ctx.getContentResolver(); 
    Uri uri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, Long.parseLong(getId())); 
    int mid = cr.update(uri, data,_ID+"="+getId(), null); 

    // notify registered observers that a row was updated 
    ctx.getContentResolver().notifyChange(
    ContactsContract.Groups.CONTENT_URI, null); 

    if (-1 == mid) 
    return false; 

    return true; 
    } catch (Exception e) { 
    Log.v(TAG(), e.getMessage(), e); 
    return false; 
    } 
} 

J'ai valeurs data, je double vérifié, et pour une raison quelconque les valeurs sont écrou expulsés. J'ai aussi couru un cur.requery(); et j'ai

<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission> 

EDIT 1 Une chose à mentionner, que je dois utiliser:

data.put(ContactsContract.Groups.SHOULD_SYNC, 1); 

la valeur true il n'y a pas accepté, bien que est renvoyé lorsque vous vérifiez les ContentValues.

Répondre

1

Ok, je me suis dit vers le bas aussi:

SQLiteException: no such column: res_package: , while compiling: UPDATE groups SET sync4=?, sync3=?, sync2=?, group_visible=?, system_id=?, sync1=?, should_sync=?, deleted=?, account_name=?, version=?, title=?, title_res=?, _id=?, res_package=?, sourceid=?, dirty=?, notes=?, account_type=? WHERE _id=20

La chose étrange est que, cette colonne est renvoyée lorsque vous interrogez le fournisseur de contenu. J'ai fait les requêtes pour utiliser toutes les colonnes retournées, donc j'ai besoin de faire ce travail en quelque sorte.

+0

pouvez-vous reformuler votre réponse afin qu'elle soit utile aux personnes qui visitent ce site s'il vous plaît? – ataulm

1

Je viens de faire quelque chose de similaire. Au lieu de

int mid = cr.update(uri, data,_ID+"="+getId(), null); 

utilisation

int mid = cr.update(uri, data,null, null)

votre uri a déjà intégré des informations d'identification.