Android пользовательский контент-провайдер

1

Я написал специальный contentprovider, который создает базу данных в sqlite3 с отдельной таблицей "user_authentication".

В то время как db и table были созданы по их соответствующим методам onCreate(), я получаю NullPointerException в методе overriden insert. Ниже приведен метод:

public Uri insert(Uri uri, ContentValues initialvalues){
         SQLiteDatabase sqlitedb = dbHelper.getWritableDatabase();
         if(sUriMatcher.match(uri)!= TABLE){
             throw new IllegalArgumentException("Unkown Uri"+uri);
         }

         ContentValues values;
         if(initialvalues != null){
             values = new ContentValues(initialvalues);
         }
         else{
             values = new ContentValues();
         }

         long rowId = sqlitedb.insert(AUTHENTICATION_TABLE_NAME, "", values);

             if(rowId>0){
                 Uri uril = ContentUris.withAppendedId(User.CONTENT_URI, rowId);
                 getContext().getContentResolver().notifyChange(User.CONTENT_URI, null);
                 sqlitedb.close();
                 return uril;
             }

             throw new SQLException("Failed to insert row into User_Authentication : " + uri);


     }

Во время отладки, я вижу, что таблица вставляется с "значениями", но когда она достигает getContext(), она возвращает null и, следовательно, ошибку.

Мне интересно, почему getContext() сохраняет null, так как пользовательский класс contentprovider расширяет android.content.ContentProvider;

Может ли кто-нибудь помочь мне в этом. BTW, я использую 2.3 sdk

Спасибо, Раджа Чандра Рангиени

  • 0
    Это вызывается после вызова onCreate ()?
Теги:
android-contentprovider

1 ответ

0

getApplicationContext() должен работать вместо getContext().

  • 1
    Спасибо, Прити. Я нашел причину. Я создавал новый объект для класса, который имеет этот метод вставки. Я считаю, что контекст устанавливается dvm, когда мы устанавливаем приложение. Я должен был использовать getContentResolver (), у которого есть контекст, инициализированный dvm. Но я пытался выяснить, почему я не могу получить доступ к контексту или applicationContext из моего класса активности. Это поведение дизайна Android, чтобы отделить бизнес-логику от аспекта данных? Кроме того, когда использовать getContext () против getApplicationContext ()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню