首页 > 解决方案 > Android Room - 全选然后写入文本文件

问题描述

我按照带有 View 教程的 Android Room 进行操作,并且成功地重新创建了教程应用程序。我的所有代码都可以在该教程中找到。现在与我的应用程序的唯一区别是我的 MainActivity 是一个 webView,然后当用户单击工具栏中的按钮时,他们会被带到具有 View 应用程序功能的房间,这与教程中的功能完全相同。所以基本上我只是事先添加了另一个活动。

我尝试使用与 LiveData 关联的 getAllWords() 和 getAlphabetizedWords() 方法,并将结果转储到 Logcat 中,但它们总是以类似哈希的字符串形式出现(例如:Word@6f2f356)。我正在尝试获取从 Room 数据库中提取的单词的确切值。

我目前有2个问题:

  1. 我想从 MainActivity 中选择 Room 数据库表中的所有单词。

  2. 从表中选择所有术语后,我想将它们全部写入文本文件或 CSV。

在我的 MainActivity 中,我使用下面的函数将用户发送到具有查看教程功能 (WordList) 的 Room 的开头。我的 WordList 类相当于教程的 MainActivity。在这个 WordList 类中,我尝试使用 getAllWords() 并以类似哈希的状态返回术语。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.nix_menu_back:
            onBackPressed();
            break;
        case R.id.nix_menu_forward:
            onForwardPressed();
            break;
        case R.id.nix_menu_refresh:
            nixWebView.reload();
            break;
        case R.id.nix_string_list:
            nixWebView.reload();
            Intent intent = new Intent(this, WordList.class);
            startActivity(intent);
            break;
    }
    return super.onOptionsItemSelected(item);
}

有人可以向我解释如何选择 Room 数据库中的所有术语并将它们以可读格式输出到 Logcat 和内部文本文件吗?

任何帮助表示赞赏,如果这是重复,我最诚挚的歉意!我已经检查过 SO,我发现与我的情况有关的唯一问题并没有涵盖这种情况。

如果被问到,我很乐意提供更多代码。谢谢大家!

标签: androiddatabaseselectandroid-room

解决方案


看起来很杂乱的字符串

如果您希望将Word对象打印在可读对象中,则应覆盖public String toString()该类的方法,因为默认实现会返回那种散漫的外观String

对此的一些启示可能是:

public class Word {
    // Other stuff you may have
    @Override
    public String toString() {
         return this.wordID+" - "this.wordContent;
    }
}

这可以打印:“12 - 猫”

列出所有单词。

该 codelab 中提供的方法足以列出 SQLite DB 中包含的所有单词。

将它们作为纯文本保存在外部文件中。

检查这个其他堆栈溢出问题

不要忘记添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在你的AndroidManifest.xml档案里!


推荐阅读