3

こんにちは私は、バッチ挿入を介してカレンダープロバイダーでいくつかのカレンダーイベントを挿入しようとしています。私のコードはIllegalArgumentExceptionで失敗します

 private void synchronizeCalendar(long calID){
    TLApplication.getDB().getDB().beginTransaction();
    try {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        TLCalendar calendar = TLApplication.getDB().loadCalendar();
        if(calendar.days!=null && calendar.days.size()> 0){
            for (TLDay day : calendar.days) {
                for (TLEvent event : day.events) {
                    List<TLComponent> comps = TLApplication.getDB().loadComponents(event.cid);
                    if(comps.size()>0){
                        TLComponent comp = comps.get(0);
                        //new batch operation
                        ops.add(ContentProviderOperation.newInsert(getCalendarUri())
                                .withValue(Events.DTSTART, getStartDate(event, comp)) //long
                                .withValue(Events.DTEND, getEndDate(event, comp)) //long
                                .withValue(Events.TITLE, getTitle(event)) //String
                                .withValue(Events.EVENT_LOCATION, getLocation(event)) //String
                                .withValue(Events.DESCRIPTION, getNotes(comp)) //String
                                .withValue(Events.CALENDAR_ID, calID) //long
                                .withValue(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()) //String
                                .build());
                    }
                }
            }
            if(ops.size() > 0){
                ContentResolver cr = ctx.getContentResolver();
                ContentProviderResult[] results = cr.applyBatch(CalendarContract.AUTHORITY, ops);
                for (ContentProviderResult result : results) {
                    Log.v(TAG, "addBatchEvent: " + result.uri.toString());
                }
            }else{
                Log.w(TAG, "No batch operations found! Do nothing");
            }
        }

    }catch (Exception e) {
        Log.e(TAG, "synchronizeCalendar", e);

    } finally{
        TLApplication.getDB().getDB().endTransaction();
    }
}

例外は次のとおりです。java.lang.IllegalArgumentException:列'calendar_id'が無効です

このコードのパターンは、sdkの「ContactManager」サンプルです。docs/ resources / samples / ContactManager / src / com / example / android / contactmanager / ContactAdder.html

カレンダーへのバッチ挿入の経験はありますか?同期アダプタを実装する必要がありますか

4

1 に答える 1

2

私の実装でバグを見つけました。以前はgetCalendarUri()を取得していましたCalendars.CONTENT_URIが、イベントに使用する必要がありEvents.CONTENT_URIます。

于 2012-12-05T14:50:18.423 に答える