Фрагменты заменяются во время выполнения AsyncTask - NullPointerException на getActivity()

Недавно я преобразовал мои действия во фрагменты.

Используя что-то похожее на Tab-Navigation, фрагменты заменяются, когда пользователь выбирает другую вкладку. После заполнения фрагмента я запускаю по крайней мере одну AsyncTask для получения некоторой информации из Интернета. Однако - если пользователь переключается на другую вкладку как раз в момент выполнения метода doBackground из моей AsyncTask - фрагмент заменяется и таким образом я получаю NullPointerException в отмеченных строках:

@Override
protected Object doInBackground(Object... params) {
  ...
  String tempjson = helper.SendPost(getResources().getText(R.string.apiid)); //ERROR: Fragment not attached
  ...
}

protected onPostExecute(Object result) {
  ...
  getActivity().getContentResolver() //NULLPOINTEREXCEPTION
  getView().findViewById(R.id.button) //NULL
  ...
}

getActivity() и getResources() возникает ошибка, потому что мой фрагмент заменяется.

Что я пробовал:

  • вызов метода cancel на моей AsyncTask (не исправляет ни первую ошибку, ни вторую, если фрагмент заменяется во время выполнения onPostExecute())
  • проверка того, что getActivity() является null или вызов this. isDetached() (не является реальным решением, и мне нужно будет проверять это каждый раз, когда я вызываю getActivity() и так далее)

Итак, мой вопрос: как лучше всего избавиться от этих проблем с AsyncTask? У меня не было таких проблем при использовании Activities, так как они не "убивались" / отделялись при смене вкладки (что приводило к большему использованию памяти - причина, по которой мне нравится переключаться на Fragments)

20
задан Boni2k 27 November 2011 в 21:53
поделиться