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

时间:2011-03-11 08:59:55

标签: java android sqlite csv text-files

问题

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

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

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

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

  1. 我错误地尝试调用我添加到DbHelper类的方法来启动“onUpgrade”。我在Eclipse中遇到错误(下面的代码)。
  2. 我错误地或不必要地执行onUpgrade()以删除当前表并读取新文本文件。
  3. 以下是我为解决问题而研究的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?
    6. 代码

      在菜单中,有两个选项。开始程序并重新加载字典文件。这是在启动时加载的简单启动活动中的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()进行静态引用”

      这是我添加到DB中的重载方法:

      public void reload(){

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

      }

      这让我在Eclipse中没有错误。

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

1 个答案:

答案 0 :(得分:0)

  

我收到错误   DbAdapter.reload(),我没有   明白“不能制造静电   参考非静态方法   从类型CarteDbAdapter“

重新加载()

这是因为DbAdapter类中的reload()方法不是静态的,而是像静态一样调用它。 您有两个选项:

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

其中哪一个是正确的取决于DbAdapter类的设计。