Не удается загрузить URI из myContentProvider (нулевой результат) - PullRequest
2 голосов
/ 16 апреля 2011

Извините за, возможно, плохой заголовок, не знаю, как описать это хорошо.

Я написал свой собственный ContentProvider под названием DeaddropDBProvider, который включает в себя следующие строки, чтобы установить некоторые константы для URI для предоставленного содержимого:

public static final String PROVIDER_NAME = 
    "squirrel.deaddropdroid.deaddropdbprovider";
public static final Uri BLOG_URI = 
    Uri.parse("content://"+ PROVIDER_NAME + "/blog");

Теперь, чтобы добраться до этих URI, я получаю к ним доступ двумя способами.Один работает, другой выходит из строя, и я не понимаю, почему.

Неудачный метод:

Метод 1): прямой вызов.Это прекрасно работает (сокращенный код):

public class DeaddropDB {
    public void getData(...) {
        Cursor cursor = context.getContentResolver().query(DeaddropDBProvider.BLOG_URI,
                columns, selection, selectionArgs, orderBy);
    }
}

Метод 2): импортировать URI как константу;тогда сделай звонок.Это дает исключение NullPointerException в тот момент, когда я пытаюсь использовать этот URI, поскольку URI по-прежнему равен нулю.

public class DeaddropDB {
    public static final Uri BLOG_URI = DeaddropDBProvider.BLOG_URI;
    public void getData(...) {
        Cursor cursor = context.getContentResolver().query(BLOG_URI,
                columns, selection, selectionArgs, orderBy);
    }
}

Почему этот второй метод не работает?Почему BLOG_URI равен нулю?

Ответы [ 2 ]

1 голос
/ 11 апреля 2013

В данный момент я вижу, что это устаревший вопрос, но, поскольку на него нет ответа, я решил добавить 2 цента ...

Я думаю, что это происходит сбой, потому что ваш DeaddropDBProvider.BLOG_URI не полностью инициализируется при инициализации DeaddropDB.BLOG_URI.

Я не эксперт по Java, но я знаю, что статические переменные определяются при первом обращении к классу; НО, если в классе A есть инициализаторы, которые ссылаются на класс B, а затем класс B пытается ссылаться на класс A, Java может некорректно обрабатывать этот случай, поэтому, если DeaddropDBProvider пытается что-либо прочитать из DeaddropDB для инициализации статической переменной, может произойти конфликт.

Я рекомендую создать класс DeaddropDBSettings, который будут читать оба других класса. Таким образом, вы не столкнетесь с конфликтами взаимной инициализации.

0 голосов
/ 16 апреля 2011

Попробуйте получить доступ следующим образом.

  public class DeaddropDB {
        public static final Uri BLOG_URI = Uri.parse("content://squirrel.deaddropdroid.deaddropdbprovide/blog");
        public void getData(...) {
            Cursor cursor = context.getContentResolver().query(BLOG_URI,
                    columns, selection, selectionArgs, orderBy);
        }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...