我正在开发跟踪传入/传出呼叫并将呼叫记录保存到数据库中的应用程序。该应用程序在模拟器中运行良好,但是当应用程序在设备上运行时,它会抛出类似(DatabaseIOException,文件系统错误(12))的错误。
以下是我正在讨论的有关应用程序的场景
A. 我已经创建了我的数据库类的单例对象并在应用程序中使用了单例类。
private MobiTracDB()
{
if(!isDBExist())
{
createDataBase();
}
else
{
openDataBase1();
}
}
public static MobiTracDB getMobiTracDB()
{
if(msMobiTrackDb == null)
{
msMobiTrackDb = new MobiTracDB();
}
if(mDb == null)
{
try
{
String myPath = Global.MOBITRACK_DB_FOLDER_PATH + DATABASE_NAME;
URI myURI = URI.create(myPath);
mDb = DatabaseFactory.openOrCreate(myURI);
}
catch ( Exception e )
{
Log.error(" In SigleTon " , e.toString());
}
}
return msMobiTrackDb;
}
B. 在单例数据库对象创建时,我正在打开数据库以进行添加/删除/更新相关操作,它工作正常。
C. 应用程序没有完全关闭,它只是进入后台,当应用程序进入后台时,我正在关闭数据库。下次当 SingleTon Obj 初始化时,数据库 Obj 将初始化。
MobiTracDB.getMobiTracDB().closeDataBase1();
public synchronized void closeDataBase1()
{
try
{
if ( mDb != null )
{
mDb.close();
}
mDb = null;
}
catch ( Exception e )
{
Log.error(getClass().getName() + " Error in Closing DB " , e.toString());
}
}
但是,当我在 Device 上部署此应用程序时,我得到 net.rim.device.api.database.DatabaseIOException: File system error (12) The File system error (12) error 我在 Singleton Method 中得到。mDb 为空,在重新初始化 mDb 时出现错误。
为什么我收到错误。请帮我。