0

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

エラーが発生する理由。私を助けてください。

4

0 に答える 0