5

Mam kilka numerów przechowywanych w mojej bazie danych aplikacji. Chciałem dopasować te liczby w aplikacji kontaktów i zaktualizować ten kontakt za pomocą typu MIME. Zasadniczo jak działa Whatsapp. Synchronizują wszystkie kontakty, a ich ikona aplikacji wchodzi w kontakt.Jak tylko aktualizować kontakty zamiast dodawać do adaptera synchronizacji

Zrobiłem część synchronizacji i jeśli dodaję nowy kontakt, mogę pokazać ikonę mojej aplikacji w kontakcie. Ale moim wymaganiem jest właśnie zaktualizować istniejący kontakt.

To co próbowałem zaktualizować kontakt,

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

     ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true)) 
      .withValueBackReference(Data.RAW_CONTACT_ID,id) 
      .withValue(Data.MIMETYPE, MIMETYPE) 
      .withValue(Data.DATA1, "Username") 
      .withValue(Data.DATA2, "Ite's Me") 
      .build()); 

     try { 
      context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

i rawContactid jestem pobierania z

Cursor cursor = context.getContentResolver().query(Data.CONTENT_URI, new String[] {Data.RAW_CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.CONTACT_ID }, 
      ContactsContract.CommonDataKinds.Phone.NUMBER + "= ?", 
        new String[] {phonenumb}, null); 

nie jestem w stanie dodać połączeń w danym kontaktem. Co ja robię źle. Czy ktoś może mi w tym pomóc.

Z góry dziękuję.

+0

Czy możesz udostępnić kod, w którym dodałeś połączenie swojej aplikacji w kontakcie. Szukam go na 2 tygodnie. Dziękuję Ci –

Odpowiedz

0

Problem polega na tym, że używasz withValueBackReference do odwoływania się do nieprzetworzonego identyfikatora kontaktu. Spowoduje to pobranie identyfikatora surowego kontaktu za pomocą Twojego parametru jako indeksu do poprzedniej operacji w grupie, tj. Jeśli id ​​= 0, odwoła się do pierwszej operacji i jeśli jest to wstawienie nowego surowca kontakt, użyj wygenerowanego identyfikatora jako nieprzetworzonego identyfikatora kontaktu dla wstawienia danych kontaktowych. Chcesz użyć tutaj withValue, ponieważ masz już nieprzetworzony identyfikator kontaktu.

0

wstaw dane swojej osoby do nowego raw_contact, a następnie połącz je z istniejącym raw_contact._id na liście kotakty za pomocą agregationexception.

ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); 
     ContentProviderOperation.Builder builder = ContentProviderOperation.newUpdate(ContactsContract.AggregationExceptions.CONTENT_URI); 
     builder.withValue(ContactsContract.AggregationExceptions.TYPE, ContactsContract.AggregationExceptions.TYPE_KEEP_TOGETHER); 
     builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID1, raw1); 
     builder.withValue(ContactsContract.AggregationExceptions.RAW_CONTACT_ID2, raw2); 
     ops.add(builder.build()); 
Powiązane problemy