Вот моя проблема. У меня есть следующий код для AsyncTask:Обработка дублирующих элементов AsyncTask при обновлении
private class BackgroundAsyncTask extends AsyncTask<String, Void, Integer> {
OkHttpUtil okHttp = new OkHttpUtil();
private static final int RESULT_FAILURE = 0;
private static final int RESULT_SUCCESS = 1;
private static final int RESULT_DATA_ADDED = 2;
private static final String TAG_SUCCESS = "success";
private static final String TAG_ARRAY = "articles";
private static final String url = "http://x/db/fetch_all.php";
@Override
protected void onPreExecute() {
super.onPreExecute();
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(true);
}
}
@Override
protected Integer doInBackground(String... params) {
int result = 0;
try {
JSONObject jsonObject = new JSONObject(okHttp.okHttpGet(url));
result = jsonObject.optInt(TAG_SUCCESS);
if (result == RESULT_SUCCESS) {
JSONArray jsonArray = jsonObject.optJSONArray(TAG_ARRAY);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonArticle = jsonArray.optJSONObject(i);
int id = jsonArticle.optInt(NewsletterHContract.FavoritesColumns.ID);
String img = jsonArticle.optString(NewsletterHContract.FavoritesColumns.IMG);
String title = jsonArticle.optString(NewsletterHContract.FavoritesColumns.TITLE);
String content = jsonArticle.optString(NewsletterHContract.FavoritesColumns.CONTENT);
mArticleList.add(new Article(id, img, title, content));
result = RESULT_DATA_ADDED;
}
}
} catch (Exception e) {
Timber.e(e, "Error parsing JSON Object");
}
return result;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if (result == RESULT_DATA_ADDED) {
mRecyclerView.getAdapter().notifyDataSetChanged();
}
if (mSwipeRefreshLayout != null) {
mSwipeRefreshLayout.setRefreshing(false);
}
}
}
AsyncTasks оказался для меня совершенно новым. Теперь дело в том, когда пользователь обновляется, я в настоящее время выполняю new BackgroundAsyncTask().execute()
.
Что это значит, это снова добавляет то же содержимое в мой RecyclerView. Есть ли способ, которым я могу выполнить эти вещи:
- Обнаруживать добавление новых данных без сравнения текущего выбранного элемента со всеми элементами списка массивов, чтобы узнать, являются ли данные устаревшими.
- Предотвращение повторного запуска AsyncTask при изменении ориентации экрана.
Позвольте мне упомянуть, что я выполняю AsyncTask в onCreateView()
моего фрагмента.