База данных SQLite в сочетании с фрагментами

Я меняю свое приложение с Activity на Fragments, это здорово, но у меня есть одна ошибка, которая не позволит мне открыть мою базу данных. Вот ошибка (из логарифма):

05-17 15:28:38.704 13025-13025/com.MJV.werktijden E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NullPointerException at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) at com.MJV.werktijden.DBAdapter.open(DBAdapter.java:71) at com.MJV.werktijden.OverviewFragment.onActivityCreated(OverviewFragment.java:38) at android.app.Fragment.performActivityCreated(Fragment.java:1703) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:903) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) at android.app.BackStackRecord.run(BackStackRecord.java:682) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) 

Я попытался решить это сам, но я не мог найти проблему. Просто потому, что эта база данных работала, когда я использовал ее с Activity. Я открываю базу данных с помощью этого метода:

  //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } 

И этот метод вызывается из моего фрагмента:

 private final DBAdapter db = new DBAdapter(getActivity()); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.overview_layout, container, false); return rootView; } public void onActivityCreated (Bundle savedInstanceState){ listView = (ListView) getView().findViewById(R.id.listView1); db.open(); 

Спасибо за помощь заранее.

Исправление

Заменить эту строку

 private final DBAdapter db = new DBAdapter(getActivity()); 

с этим

 private DBAdapter db; 

В onActivityCreated() добавьте следующую строку

 db = new DBAdapter(getActivity()); 

Что происходит

В строке private final DBAdapter db = new DBAdapter(getActivity()); В вашем Fragment вы вызываете getActivity() перед созданием активности. Поэтому, когда SQLiteOpenHelper пытается использовать Context (ваша активность), он обнаруживает, что он равен нулю. Таким образом, простым getActivity() является только вызов getActivity() и, следовательно, открытие вашей базы данных только тогда, когда после создания Activity .

Есть ли ожидающие подключения, обычно это происходит, когда база данных открыта в данном Context .

Проверьте это, если в этом Fragment присутствует незакрытое соединение.

Intereting Posts
Android Как настроить макет в полноэкранном режиме, когда видна клавиатура Установите onItemClick в пользовательский адаптер ListView Значок панели действий, скрытый после того, как SearchView расширяется Анализ сигналов Android + некоторые фильтры Невозможно заполнить Spinner данными из базы удаленных серверов Создание тоста в действии из другого файла класса Java Пикассо загружается в неправильное изображение при использовании шаблона держателя изображения Android – эспрессо – нажатие на запись listview на основе пользовательских объектов Тема не применяется к программно добавленным представлениям? Эффект завивки страницы Android на макете / с Как получить завершающий ответ на setImageUrl с библиотекой Volley и NetworkImageView? Использование syncState () в ActionBarDrawerToggle Android-селектор с фоновым изображением и градиентом Кнопка «Создание Android» динамически и заполнение макета Загрузка сетки Android в обратном порядке