我的应用程序使用服务记录每个来电和去电。
此服务在断开调用后存储文件,然后在SQLite数据库中创建一行。
然后我在MainActivity
中使用此数据,使用ListView
填充SimpleCursorAdapter
。
我遇到的问题是,如果我对SQlite数据库进行结构更改(例如添加新列),我需要更新版本,然后导致onUpgrade删除表,从而删除所有数据。因此,没有ListView
个项目。
如果我通过列出目录中的文件填充我的ListView
,我将无法确定通话时间。
答案 0 :(得分:0)
SQlite
数据库是很好的。
对于您的应用,您可以使用更简单的内容,即SharedPreferences
文件。
您可以使用简单的JSON
对象,例如:
{
path : path_value,
date : date_value,
duration : duration_value,
.....
}
创建一个JSON
个对象数组,将其转换为字符串并将其保存到SharedPreferences
。
由于SharedPreferences
更简单,因此您无法使用它,因此在更新应用时您不必修改它。
注意:当您显示每个文件时,您可能还想使用path
来检查它是否真的存在。
答案 1 :(得分:0)
问题是,如果我在sqlite数据库中进行更改,我需要更新 版本,然后所有listview项目都消失了,因为数据库有 已更新,但录制的文件存储在应用程序数据目录中。
(编辑问题后)
我遇到的问题是,如果我对SQlite进行结构更改 数据库(例如添加新列),我需要更新版本, 然后导致onUpgrade删除表,从而导致所有 数据。因此,没有ListView项目。
您实际上不必更新版本(如果您愿意,可以使用自己的方法)。但是,即使您这样做,也可以使用代码来保留旧数据。也就是说,你不一定限于使用那些看得多,复制得多的 DROP TABLE调用onCreate 模型,例如: -
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
您可以使用 ALTER TABLE 添加列,例如
ALTER TABLE log ADD COLUMN extra TEXT DEFAULT extra ;
使用上述结果导致: -
在添加了列额外的情况下,注意到已应用默认值并且保留了现有数据(未使用PS增加版本/ onUpgrade
)。
这篇文章简要讨论了 DROP TABLE调用onCreate 模型,其中包含其他指针Android SQLite Database, WHY drop table and recreate on upgrade。