Recyclerview не обновляет данные ROOM sqlite - PullRequest
1 голос
/ 24 июня 2019

Я использую базу данных 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();
                    }
                });
            }
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...