【问题标题】:Reloading a Text file into a Database after Initial Creation初始创建后将文本文件重新加载到数据库中
【发布时间】:2011-03-11 08:59:55
【问题描述】:

问题

我编写了一个简单的、基于 Android 的“闪存卡”程序,它从存储在设备上的文本文件(例如 .csv、.xml)加载“字典”,并允许用户逐步浏览单词和定义.

我一直在尝试(未成功)实现一个菜单选项,用户可以在其中重新加载文本文件(例如,他们已将单词添加到他们的文本文件并将其复制到他们的 sdcard)。这些文件都比较小~30kB。

我的代码是基于 Google 随其 SDK 提供的示例应用“Searchable Dictionary v2”批发的。它使用他们的 DbHelper。

闪存卡位按预期工作,但我无法重新加载文本文件。我认为我有两个无法解决的问题:

  1. 我错误地尝试调用我添加到 DbHelper 类的方法来启动“onUpgrade”。我在 Eclipse 中遇到错误(代码如下)。
  2. 我错误地或不必要地执行了 onUpgrade() 来删除当前表并读取新的文本文件。

这是我为解决问题而研究的 StackOverflow 条目。它们是有用的背景,但我无法使用它们来解决我的问题。

  1. self call onUpgrade method
  2. Adding a second table in a database
  3. Upgrade SQLite database from one version to another?
  4. Creating android app Database with big amount of data
  5. Is the onUpgrade method ever called?

代码

在菜单中,有两个选项。开始程序并重新加载字典文件。这是启动时加载的简单启动活动中的 onOptionMenuItemSelected:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        /*case INSERT_ID:
            createNote();
            return true;*/

        case FLASH_CARDS:
            Intent myIntent = new Intent(Cards.this, FlashCards.class);
            startActivity(myIntent);
            return true;

        case RELOAD_FILE:
            DbAdapter.reload();

        }

        return super.onOptionsItemSelected(item);
    }

我从 DbAdapter.reload() 收到一个我不理解的错误“无法从 CarteDbAdapter 类型对非静态方法 reload() 进行静态引用”

这是我添加到数据库的重新加载方法:

公共无效重载(){

SQLiteDatabase tableau = mDatabaseOpenHelper.getReadableDatabase();
int versionNum = tableau.getVersion();
Log.w(TAG, "Current Version: " + versionNum);
    mDatabaseOpenHelper.onUpgrade(tableau, versionNum, versionNum+1);
tableau.close();

}

这在 Eclipse 中没有给我任何错误。

感谢您抽出宝贵时间阅读本文。我希望它也能帮助其他初学者。

【问题讨论】:

    标签: java android sqlite csv text-files


    【解决方案1】:

    我从 我没有的 DbAdapter.reload() 了解“无法制作静态 引用非静态方法 来自 CarteDbAdapter 类型的 reload()"

    这是因为 DbAdapter 类中的 reload() 方法不是静态的,但是您调用它时就像是静态的一样。 您有两种选择:

    • 创建一个 DbAdapter 类型的实例并在其上调用 reload()。或
    • 或者将方法重新加载更改为静态

    哪些是正确的取决于 DbAdapter 类的设计。

    【讨论】:

    • 感谢 vdstw。我认为 SampleDictionary 代码的 DbAdapter 设计要求我使用您的第一个选项(即,声明 reload() 静态会导致我发现难以解决的涟漪影响)。当你说“创建一个实例”和“调用 reload()”时,你能给我一个例子来说明你的意思吗?再次感谢您。
    • 创建实例是基本的 Java 101:new DbAdapter() 但就像我说的,这完全取决于类的设计。由于没有提供“DbAdapter”类,我无法为您提供更多帮助。
    猜你喜欢
    • 2014-09-21
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多