【问题标题】:Android exception while adding calendar添加日历时出现Android异常
【发布时间】:2014-03-06 12:43:04
【问题描述】:

我在尝试向 ContentProvider 添加日历时遇到了一个奇怪的问题,

它通常可以工作,但是我正在测试一台设备,但它没有 - 我崩溃了。 此设备:Android 4.0.4 (API15) 平板电脑。

我的一些代码:

    private static Uri buildCalUri() {
    return CalendarContract.Calendars.CONTENT_URI.buildUpon()
            .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
            .appendQueryParameter(Calendars.ACCOUNT_NAME, ACCOUNT_NAME)
            .appendQueryParameter(Calendars.ACCOUNT_TYPE, ACCOUNT_TYPE).build();
}

private static ContentValues buildContentValues(CalendarData cd) {

    String dispName = cd.getName();
    String intName = INT_NAME_PREFIX + dispName;
    final ContentValues cv = new ContentValues();
    cv.put(Calendars.ACCOUNT_NAME, ACCOUNT_NAME);
    cv.put(Calendars.ACCOUNT_TYPE, ACCOUNT_TYPE);
    cv.put(Calendars.NAME, intName);
    cv.put(Calendars.CALENDAR_DISPLAY_NAME, dispName);
    cv.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_NONE );
    cv.put(Calendars.OWNER_ACCOUNT, ACCOUNT_NAME);
    cv.put(Calendars.VISIBLE, cd.isVisible() ? 1 : 0 );
    cv.put(Calendars.SYNC_EVENTS, 1 );
    return cv;
}

public static long addCalendar(Context context, final CalendarData cd,
        final ContentResolver cr) {
    if (cd == null)
        throw new IllegalArgumentException();

    /*
     * On Android < 4.1 create an account for our calendars. Using ACCOUNT_TYPE_LOCAL would
     * cause these bugs:
     * 
     * - On Android < 4.1: Selecting "Calendars to sync" in the calendar app it crashes with
     * NullPointerException. see http://code.google.com/p/android/issues/detail?id=27474
     * 
     * - On Android <= 2.3: Opening the calendar app will ask to create an account first even
     * when local calendars are present
     */

    long calID;
    // Add calendar
    final ContentValues cv = buildContentValues(cd);
    Uri uri = cr.insert( buildCalUri(), cv );

    calID = Long.parseLong( uri.getLastPathSegment() );

    return calID; 
}

我得到了:

E/AndroidRuntime( 3221): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime( 3221): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime( 3221): at android.os.AsyncTask$3.done(AsyncTask.java:278)
E/AndroidRuntime( 3221): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
E/AndroidRuntime( 3221): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
E/AndroidRuntime( 3221): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
E/AndroidRuntime( 3221): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
E/AndroidRuntime( 3221): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
E/AndroidRuntime( 3221): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
E/AndroidRuntime( 3221): at java.lang.Thread.run(Thread.java:856)
E/AndroidRuntime( 3221): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 3221): at android.os.Parcel.readException(Parcel.java:1333)
E/AndroidRuntime( 3221): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:182)
E/AndroidRuntime( 3221): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:136)
E/AndroidRuntime( 3221): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:415)
E/AndroidRuntime( 3221): at android.content.ContentResolver.insert(ContentResolver.java:733)
E/AndroidRuntime( 3221): at com.my.app.CalendarMapper.addCalendar(CalendarMapper.java:128)

第 128 行 CalendarMapper 是: uri uri = cr.insert(buildCalUri(), cv);

而且我真的不知道是什么导致了这个异常.. 有什么想法吗?

提前致谢!

【问题讨论】:

  • 你的代码在哪里?发布它
  • 检查类 CalendarMapper.java 的第 128 行。
  • 我在下面更新了我的帖子

标签: android crash calendar provider


【解决方案1】:

您需要为此使用 AsycTask。请给我们一些代码。

【讨论】:

    【解决方案2】:

    BuildCallURI 和 buildContentValues 与其列不匹配,向 builCalURI 添加更多查询参数并确保它们与 ContentValues 匹配

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2014-09-16
      相关资源
      最近更新 更多