【发布时间】:2013-10-08 11:51:32
【问题描述】:
我有一个类,DownloadAndSave,它从 AsyncTask 扩展而来。在其doInBackground 方法中,它从http 连接检索数据并使用OrmLite 保存数据,但也从数据库中清除旧条目。所以,是这样的:
doInBackground()
{
clearDb();
dataList = fetchDataFromHttp();
saveToDb(dataList);
}
我经常遇到数据库异常:
尝试重新打开一个已经关闭的对象:SQLiteDatabase
在 clearDb() 和 saveToDb() 函数中。
这很糟糕,因为先前调用 DownloadAndSave 的旧数据与来自 DownloadAndSave 的新数据混合在一起。
在我看来,我需要确保当我启动一个线程时,DownloadAndSave 类中的所有其他线程都已完成,或者换句话说,我最多需要运行 DownloadAndSave 的一个实例一次。所以问题是:我如何确保在任何时间点只有一个 DownloadAndSave 实例会运行?
【问题讨论】:
-
您是否扩展了 ORMLite 附带的活动并在异步任务中使用 getHelper?
-
您是否尝试过同步为您的目的?
标签: android sqlite android-asynctask ormlite