【发布时间】:2011-03-11 08:59:55
【问题描述】:
问题
我编写了一个简单的、基于 Android 的“闪存卡”程序,它从存储在设备上的文本文件(例如 .csv、.xml)加载“字典”,并允许用户逐步浏览单词和定义.
我一直在尝试(未成功)实现一个菜单选项,用户可以在其中重新加载文本文件(例如,他们已将单词添加到他们的文本文件并将其复制到他们的 sdcard)。这些文件都比较小~30kB。
我的代码是基于 Google 随其 SDK 提供的示例应用“Searchable Dictionary v2”批发的。它使用他们的 DbHelper。
闪存卡位按预期工作,但我无法重新加载文本文件。我认为我有两个无法解决的问题:
- 我错误地尝试调用我添加到 DbHelper 类的方法来启动“onUpgrade”。我在 Eclipse 中遇到错误(代码如下)。
- 我错误地或不必要地执行了 onUpgrade() 来删除当前表并读取新的文本文件。
这是我为解决问题而研究的 StackOverflow 条目。它们是有用的背景,但我无法使用它们来解决我的问题。
- self call onUpgrade method
- Adding a second table in a database
- Upgrade SQLite database from one version to another?
- Creating android app Database with big amount of data
- 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