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