Java 初始创建后将文本文件重新加载到数据库中

Java 初始创建后将文本文件重新加载到数据库中,java,android,sqlite,csv,text-files,Java,Android,Sqlite,Csv,Text Files,问题 我编写了一个简单的、基于Android的闪存卡程序,该程序从存储在设备上的文本文件(例如.csv、.xml)加载字典,并允许用户逐步浏览单词和定义 我一直试图实现一个菜单选项,用户可以在其中重新加载文本文件,但没有成功。例如,他们向文本文件中添加了单词,并将其复制到SD卡中。这些文件都相对较小,约30kB 我的代码是基于谷歌SDK提供的示例应用程序的批发。它使用它们的DbHelper 闪存卡位按预期工作,但我无法重新加载文本文件。我想我有两个问题无法解决: 我错误地试图调用添加到DbHel

问题

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

我一直试图实现一个菜单选项,用户可以在其中重新加载文本文件,但没有成功。例如,他们向文本文件中添加了单词,并将其复制到SD卡中。这些文件都相对较小,约30kB

我的代码是基于谷歌SDK提供的示例应用程序的批发。它使用它们的DbHelper

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

我错误地试图调用添加到DbHelper类中的方法来启动onUpgrade。下面的代码在Eclipse中出现了一个错误。 我正在错误地或不必要地执行onUpgrade以删除当前表并读取新文本文件。 下面是我为解决这个问题而研究的StackOverflow条目。它们是有用的背景,但我一直无法使用它们来解决我的问题

代码

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

 @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进行静态引用

下面是我添加到DB中的重新加载方法:

公共空间重新加载{

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

这使我在Eclipse中没有错误

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

我从数据库中得到一个错误 DbAdapter.reload,但我没有 理解不能使一个静态 参考非静态方法 从CartedAdapter类型重新加载

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

创建DbAdapter类型的实例并对其调用reload。或 或者,将“重新加载”方法更改为静态
以下哪项是正确的取决于DbAdapter类的设计。

谢谢vdstw。我认为针对SampleDictionary代码的DbAdapter的设计要求我使用您的第一个选项,即声明重载静态导致我发现难以解决的涟漪影响。当你说创建一个实例并调用reload时,你能给我一个例子来说明你的意思吗?再次感谢您。创建实例是基本的Java101:new DbAdapter,但正如我所说的,这一切都取决于类的设计。由于没有提供DbAdapter类,我无法进一步帮助您。