Недавно я преобразовал свои действия в фрагменты.
Используя что-то похожее на 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()
вызывает ошибку, потому что мой фрагмент заменен.
Что я пробовал:
- Вызов метода отмены на моей AsyncTask (не будет исправлять первую ошибку или вторую ошибку, если фрагмент заменяется при выполнении
onPostExecute()
) - проверка if
getActivity()
null
или вызовthis.isDetached()
(не реальное исправление, и мне нужно будет его проверять всякий раз, когда я вызываюgetActivity()
и т.д.)
Итак, мой вопрос: что было бы лучше, чтобы избавиться от этих проблем AsyncTask? У меня не было этих проблем с помощью "Активных", поскольку они не были "убиты" /отключены при изменении вкладок (что привело к увеличению использования памяти - причина, по которой мне нравится переключаться на фрагменты)