В моем приложении я нахожусь в процессе упаковки доступа к базе данных в ContentProvider. Это потому, что иногда у меня возникают сбои, потому что два потока обращаются к базе данных одновременно. Я в значительной степени полагаюсь на фоновые потоки, чтобы получить данные с веб-сервера и поместить их в базу данных; когда пользователь переключается между действиями, у вас может быть несколько запущенных одновременно. Вот почему.
Теперь как.
Я реализовал класс ContentProvider, и это, кажется, работает нормально. Зарегистрировано в манифесте, и это также показывает в LogCat, что поставщик активен.
Приложение со всеми своими действиями обращается к базе данных через класс-оболочку, который сам по себе не является действием. Конструктор этого класса принимает контекст вызывающего действия в качестве параметра. Ничего особенного там нет.
Теперь моя проблема:
При обращении к поставщику контента через метод context.query () я получаю сбой:
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): Caused by: java.lang.NullPointerException
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at android.content.ContentResolver.acquireProvider(ContentResolver.java:727)
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at android.content.ContentResolver.query(ContentResolver.java:239)
04-15 23:05:33.699: ERROR/AndroidRuntime(3564): at squirrel.DeaddropDroid.DeaddropDB.query(DeaddropDB.java:482)
Оскорбительная строка:
final Cursor blog2 = db.query(DeaddropDB.BLOG_TABLE, new String[] {
DeaddropDB.KEY_ID, DeaddropDB.KEY_DATE,
DeaddropDB.KEY_BLOG_SUMMARY }, null, null,
DeaddropDB.KEY_DATE + " DESC");
db - это объект БД, конструктор принимает контекст действия в качестве параметра.
В том же упражнении следующая строка работает как положено и дает правильные результаты:
final Cursor blog = managedQuery(DeaddropDBProvider.BLOG_URI,
new String[] {DeaddropDB.KEY_ID, DeaddropDB.KEY_DATE,
DeaddropDB.KEY_BLOG_SUMMARY }, null, null,
DeaddropDB.KEY_DATE + " DESC");
Это доказывает, что мой ContentProvider работает и правильно зарегистрирован. Я действительно в недоумении от того, что здесь происходит! Почему этот запрос не работает как рекламируется?