Android Studio Room数据库-不返回onRestart()方法中的值

时间:2018-10-12 10:46:16

标签: android-studio android-room

我的应用程序是元素名称的列表。单击一个将转到具有更多详细信息的另一个活动,以及一个editText和按钮以更改其名称。当我返回列表时,希望它具有新名称(如果已更新)。我的onCreate方法具有这段代码,可以完美地从数据库中填充它(忽略硬编码的大小,调试起来更简单)

        final String DATABASE_NAME = "element_db";
        final AppDatabase appDatabase;
        appDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DATABASE_NAME).build();

        ListView list = (ListView)findViewById(R.id.listView);
        final String[] element = new String[3];
        new Thread(new Runnable() {
            @Override
            public void run() {
                List<Element> elements;
                elements = appDatabase.elementDao().fetchElements(); // a dao query "select*from"
                int size = elements.size();
                for (int i = 0; i < size; i++){
                    element[i] = elements.get(i).getName();
                }
            }
        }) .start();
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_list_view, R.id.textView, element);
        list.setAdapter(arrayAdapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent i = new Intent(MainActivity.this, itemdetail.class);
                i.putExtra("pos", position);
                startActivity(i);
            }
        });

为了在返回此屏幕时获得更新的列表,我将上面的代码复制到onRestart方法中,但是现在数据库不返回任何内容。如果我只是将进入适配器的数组设置为{“ a”,“ a”,“ a”},则列表会很好地填充。为什么数据库只能在onCreate而不在onRestart上工作?

1 个答案:

答案 0 :(得分:0)

我认为您可以使用ViewModel和livedata观察任何数据库更改