由于内容值中存在 IllegalArgumentException,无法插入新日历
Cannot insert a new Calendar because of IllegalArgumentException in content values
我想在 CalendarProvider
中插入本地日历。这是我的工作:
Uri uri = asSyncAdapter(CalendarContract.Calendars.CONTENT_URI, "Test", CalendarContract.ACCOUNT_TYPE_LOCAL);
ContentValues values = new ContentValues();
values.put(CalendarContract.Calendars.NAME, "Test");
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "Test Calendar (Added Programmatically)");
values.put(CalendarContract.Calendars.CALENDAR_COLOR, 0x00FF00);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, "Test");
Uri insertUri = getContentResolver().insert(uri, values);
此方法复制自开发者:
static Uri asSyncAdapter(Uri uri, String account, String accountType) {
return uri.buildUpon()
.appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, account)
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType).build();
}
但是我为名称列输入了值,我得到了类似的异常:
java.lang.IllegalArgumentException: the name must not be empty: null
我该如何解决?
我发现了问题。我必须明确地为帐户名称和帐户类型设置值:
values.put(CalendarContract.Calendars.ACCOUNT_NAME, "Test");
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);
我想在 CalendarProvider
中插入本地日历。这是我的工作:
Uri uri = asSyncAdapter(CalendarContract.Calendars.CONTENT_URI, "Test", CalendarContract.ACCOUNT_TYPE_LOCAL);
ContentValues values = new ContentValues();
values.put(CalendarContract.Calendars.NAME, "Test");
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "Test Calendar (Added Programmatically)");
values.put(CalendarContract.Calendars.CALENDAR_COLOR, 0x00FF00);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, "Test");
Uri insertUri = getContentResolver().insert(uri, values);
此方法复制自开发者:
static Uri asSyncAdapter(Uri uri, String account, String accountType) {
return uri.buildUpon()
.appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, account)
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType).build();
}
但是我为名称列输入了值,我得到了类似的异常:
java.lang.IllegalArgumentException: the name must not be empty: null
我该如何解决?
我发现了问题。我必须明确地为帐户名称和帐户类型设置值:
values.put(CalendarContract.Calendars.ACCOUNT_NAME, "Test");
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);