web-dev-qa-db-ja.com

Android:カーソルウィンドウがいっぱいです

W/CursorWindow(15677):ウィンドウがいっぱいです:要求された割り当て2195889バイト、空き領域2096720バイト、ウィンドウサイズ2097152バイト

利用可能なアプリメモリがあることを知っています:

D/dalvikvm(15677):GC_FOR_ALLOCは9Kを解放し、30%は17050K/24291Kを解放し、45msを一時停止しました

したがって、blobbyte[]に読み込むときは、純粋にカーソルサイズウィンドウと関係があります。

組み込みメソッドを使用して、カーソルからblobを読み取ります。

    try
    {
        c = rdb.query("Photos", new String[]{"photo"}, "id = ?", new String[]{""+photoID}, null, null, null);
        if(c.moveToFirst())
        {
            byte[] tArray = c.getBlob(c.getColumnIndex("photo")); // THIS LINE ERRORS
        }               
    }catch(Exception e)
    {
        e.printStackTrace();
    }
    c.close();

    return tArray;

これを回避する方法はありますか?ウィンドウサイズは2097152バイトに制限されているようです。

20
Doomsknight

これを回避する最善の方法は、写真をSDカードに保存し、URIをDBに保存することだと思われます。

私はこれを避けたかったのですが、それほど悪くはなく、はるかに安定しています。

18
Doomsknight