2012-04-03 2 views
2

Я пытаюсь добавить/обновить дни рождения в моем списке контактов. Я могу добавлять дни рождения, однако у меня возникают проблемы при обновлении дня рождения.Дата рождения удалена после обновления

В ожидании пары секунд после обновления данные дня рождения исчезают/удаляются.

Я заметил, что только после обновления дня рождения, поле «грязного» получает значение «1», который я предполагаю, триггера механизм синхронизации (я только начинаю с контактами)

Вот фрагменты что я использую

INSERT/ADD BirthDay

long rawContactId = -1; 
    String[] projection = new String[]{ContactsContract.CommonDataKinds.Event.RAW_CONTACT_ID}; 
    String selection = ContactsContract.CommonDataKinds.Event.CONTACT_ID + "=?"; 

    String[] selectionArgs = new String[]{ 
     String.valueOf(bdayContact.getId()) 
    }; 

    Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
      projection, 
      selection, 
      selectionArgs, null); 
    try { 
     if (c.moveToFirst()) { 
      rawContactId = c.getLong(0); 
     } 
    } finally { 
     c.close(); 
    } 

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) 
     .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, bday) 
     .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) 
     .build()); 

    try { 
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

UPDATE РОЖДЕНИЯ

String selection = ContactsContract.CommonDataKinds.Event.CONTACT_ID+"=? AND " + 
ContactsContract.CommonDataKinds.Event.MIMETYPE+"=? AND " + 
ContactsContract.CommonDataKinds.Event.TYPE+"=?" 
       ; 
String[] selectionArgs = new String[]{ 
          String.valueOf(contacts.get(position).getId()), 
         String.valueOf(ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE), 
         String.valueOf(ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) 
       }; 

       Cursor cursor = managedQuery(ContactsContract.Data.CONTENT_URI, null, selection, selectionArgs, null); 

       if(cursor.moveToFirst()){ 
        int index = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event._ID); 
        String eventId = cursor.getString(index); 

        String bday = year+"-"+(monthOfYear+1)+"-"+dayOfMonth; 
       } 

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI) 
     .withSelection(ContactsContract.Data._ID + " = ?", new String[] {eventId}) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, bday) 
     .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) 
     .build()); 

    try { 
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

Я нашел проблему! Данные удаляются из-за неправильного форматирования. Кажется, что ведущие нули в месячных и дневных полях важны. Одна вещь, которую я заметил, что при вводе новых дней рождения не имеет значения, если у вас нет начальных нулей. String bday = year + "-" + String.format ("% 02d", (monthOfYear + 1)) + "-" + String.format ("% 02d", dayOfMonth); –

ответ

2

Я нашел проблему!

Данные удаляются из-за неправильного форматирования.

Похоже, что ведущие нули в полях месяца и дня важны. Одна вещь, которую я заметил, что при вводе новых дней рождения не имеет значения, если у вас нет начальных нулей.

String bday = year+"-"+String.format("%02d", (monthOfYear+1))+"-"+String.format("%02d", dayOfMonth); 
Смежные вопросы