首页 > 解决方案 > 恢复房间数据库后,Android reyclerview 没有得到更新

问题描述

在恢复屏幕中,我从谷歌驱动器恢复我的 sqlite db(房间数据库)文件。在我回到我的主要活动之后 - recyclerview 显示缓存的数据,而不是显示新的恢复的数据库数据。

我尝试在主要活动中再次初始化我的 ViewModel - 但这没有帮助。

@Override
    protected void onResume() {
        super.onResume();

        setupViewModel(); // re-initialising my ViewModel
        Toast.makeText(this, "Your expenses have been restored", Toast.LENGTH_SHORT).show();
    }

如果我在恢复后重新启动我的应用程序,我可以在主要活动中看到来自恢复的数据库的数据。

任何帮助,将不胜感激。我现在的解决方法是 - 我可以要求用户在他们从谷歌驱动器恢复数据库后重新启动应用程序。

更新:

private void setupViewModel() {
        //Associate ViewModel to this activity
        ItemViewModel itemViewModel = new ViewModelProvider(this).get(ItemViewModel.class);
        itemViewModel.getItems().observe(this, new Observer<List<Item>>() {
            @Override
            public void onChanged(List<Item> items) {
                ItemsActivity.this.items = items;
                itemsAdaptor.setItems(items);
            }
        });
    }

标签: androidandroid-recyclerviewandroid-roomandroid-mvvm

解决方案


重新启动应用程序正在解决我的用例的问题。

我正在使用以下代码重新启动应用程序:

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);

理想情况下,关闭和重新打开数据库应该可以工作,但对我不起作用。重新启动应用程序后,它将使用新恢复的数据库。


推荐阅读