アプリケーションに巨大なデータベース (SQLite エンジン) があり、週に 1 回クエリを実行し、そのクエリのカーソルをキャッシュして後で再利用する必要があるため、カーソルを保存するために次の関数を作成しましObjectStream
たが、シリアル化できないため、ロードできObjectInputStream
ません!!!
この機能を実現する方法についてのアイデアはありますか?
public Cursor getCachedCursor(ReaderState state, String[] allowedColumns
, String sortType, int limit) throws IOException, ClassNotFoundException
{
File cacheFilePath = CacheManager.getCachePath(state.toString() + ".cached");
Cursor mCursor = null;
try
{
if (cacheFilePath == null)
{
FileOutputStream mFileOutputStream = new FileOutputStream(cacheFilePath);
ObjectOutputStream mObjectOutputStream = new ObjectOutputStream(mFileOutputStream);
mObjectOutputStream.writeObject(mDatabase.query(TABLE_NAME, allowedColumns, null, null
, null, null, sortType, String.valueOf(limit)));
mObjectOutputStream.close();
}
}
finally
{
FileInputStream mFileInputStream = new FileInputStream(cacheFilePath);
ObjectInputStream mObjectInputStream = new ObjectInputStream(mFileInputStream);
mCursor = (Cursor) mObjectInputStream.readObject();
mObjectInputStream.close();
}
return mCursor;
}