Я использую базу данных ROOM для добавления и получения данных из базы данных и использую RecyclerView для отображения данных.Проблема здесь в том, что после определенных обновлений представление переработчика не отображает обновленные данные в представлении переработчика, однако моя база данных корректно обновляет каждый запрос.Еще одна проблема заключается в том, что я не могу использовать загрузку при обновлении данных.
Я закрываю базу данных каждый раз, и мне кажется, что RecyclerView не ждет, пока обновляется моя база данных.
Яполучение этого сообщения в информации Не удалось изменить журнал базы данных, так как база данных была занята.Продолжение ... Не удалось изменить журнал базы данных, поскольку БД была занята.Продолжение ... Просто чтобы сообщить, что я использую несколько запросов в одном и том же методе
Мне нужно знать, есть ли какой-нибудь способ, чтобы я мог хранить базу данных до тех пор, пока мой запрос не будет выполнен полностью, тогда я могу обновить свою базу данных,это также поможет мне показать «загрузку» пользователю во время выполнения запроса
private void AllStationsList() {
if (FinalList != null) {
FinalList.clear();
}
getOnlyFavourites();
getAllWithoutFavourites();
}
private void getOnlyFavourites() {
//Get stationList of only favourites
StationListRepository stationListRepositoryOnlyFavourites = new StationListRepository(getApplicationContext());
stationListRepositoryOnlyFavourites.getStationListFavourites().observe(this, new Observer<List<StationList>>() {
@Override
public void onChanged(List<StationList> OnlyFavouritesstations) {
assert OnlyFavouritesstations != null;
if (OnlyFavouritesstations.size() > 0) {
OnlyFavouritesstations = sortList(OnlyFavouritesstations);
FinalList = OnlyFavouritesstations;
}
}
});
stationListRepositoryOnlyFavourites.closeDB();
}
private void getAllWithoutFavourites() {
//Get stationList of all stations without favourites
StationListRepository stationListwithoutFavorites = new StationListRepository(getApplicationContext());
stationListwithoutFavorites.getStationList().observe(this, new Observer<List<StationList>>() {
@Override
public void onChanged(List<StationList> stationsWithoutFavouries) {
Log.d("NotfavList", "" + stationsWithoutFavouries.size());
assert stationsWithoutFavouries != null;
if (stationsWithoutFavouries.size() > 0 || FinalList.size() > 0) {
if (FinalList != null && FinalList.size() > 0) {
stationsWithoutFavouries = sortList(stationsWithoutFavouries);
FinalList.addAll(stationsWithoutFavouries);
} else {
stationsWithoutFavouries = sortList(stationsWithoutFavouries);
FinalList = stationsWithoutFavouries;
}
Log.d("FinalListSizeActiveALL", "" + FinalList.size());
detailsAdapter = new db_stationListAdapter(context, FinalList);
recyclerView.setAdapter(detailsAdapter);
/*detailsAdapter.notifyDataSetChanged();*/
for (stationPostion = 0; stationPostion < FinalList.size(); stationPostion++) {
if (FinalList.get(stationPostion).getStationId().equalsIgnoreCase(Common.SELECTED_STATION) && onStationClick == true) {
Common.SCROLL_POSITION = stationPostion;
onStationClick = false;
break;
} else {
Common.SCROLL_POSITION = 0;
}
}
recyclerView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int
right, int bottom, int oldLeft, int oldTop, int oldRight,
int oldBottom) {
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
onStationClick = false;
recyclerView.smoothScrollToPosition(Common.SCROLL_POSITION);
}
}, 500);
}
});
runOnUiThread(new Runnable() {
@Override
public void run() {
//stopLoading();
stopAnimation();
}
});
}
}
});
}