着信/発信通話を追跡し、通話レコードをデータベースに保存するアプリケーションに取り組んでいます。アプリケーションはシミュレーターで正常に動作しますが、アプリケーションがデバイスで実行されると、( 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 I am got in Singleton Method を取得しています。mDb が null で、mDb の再初期化中にエラーが発生しました。
エラーが発生する理由。私を助けてください。