Сбой курсора базы данных SQLite - PullRequest
0 голосов
/ 02 июля 2018

Я использую sqlite DB для хранения местоположения моих пользователей, пока они в сети, но по какой-то причине я получаю этот отчет о сбое, и я не знаю, что это такое или как его исправить.

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. 
    at android.database.CursorWindow.<init>(CursorWindow.java:108)
    at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
    at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)
    at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)
    at com.tech.databases.Routes_DB.savedGPSHasEntries(Routes_DB.java:109)
    at com.tech.activity.Menu_dashboard.onLocationChanged(Menu_dashboard.java:2602)
    at com.google.android.gms.c.b.r.a(Unknown:-1)
    at com.google.android.gms.common.api.internal.h.b(Unknown:-1)
    at com.google.android.gms.common.api.internal.h$c.handleMessage(Unknown:-1)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6314)
    at java.lang.reflect.Method.invoke(Method.java:-2)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

Каждая вещь, которую я посмотрел, говорит, что это вызвано не закрытием моего курсора, но в моем коде я закрываю его каждый раз:

public boolean savedGPSHasEntries(){
    boolean hasEntry = false;

    String countQuery = "SELECT  * FROM " + TABLE_SAVED_ROUTE;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    int cnt = cursor.getCount();

    if (cnt > 0)
        hasEntry = true;

   // Log.e("Database", "Count: " + cnt);
    cursor.close();

    return hasEntry;
}

И вот как я запрашиваю данные:

if (routesDB.savedGPSHasEntries()) {
    Log.e(TAG, "DB isn't empty");
}

Так что я запутался из-за этой ошибки или как вообще начать выяснять, как ее исправить.

1 Ответ

0 голосов
/ 02 июля 2018

CursorWindowAllocationException

Это исключение выдается, когда CursorWindow не может быть выделено, скорее всего из-за недоступности памяти.

Вы должны использовать

  • String countQuery = "SELECT count(*) FROM " + TABLE_SAVED_ROUTE;
  • Убедитесь, что закройте также DB .

DEMO

cursor.close(); 
db.close();

Попробуйте с

String countQuery = "SELECT count(*) FROM " + TABLE_SAVED_ROUTE;

    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.moveToFirst();
    int count = cursor.getInt(0);
    if(count>0)
    {

    }

Для получения дополнительной информации см. How to get row count in sqlite using Android?

...