mardi 22 mars 2016

Cursor Exception during Async Task

I am running a background task that goes out and downloads a JSON file, pareses it, then adds it to the contents to a SQLite database.

I am getting a couple of errors when it runs.

Caused by: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=728 (# cursors opened by this proc=728)

E/CursorWindow: Could not allocate CursorWindow '/data/data/com.mycompany.inventory/databases/dbInventory.sql' of size 2097152 due to error -12.

The JSON has about 1500 items in it.

Here is the method my async task calls:

public void addModelsToDB(JSONObject dict){
        String  insertQuery  = "";
        String  deleteQuery  = "DROP TABLE IF EXISTS 'tblModels'";
        String  createQuery  = "CREATE TABLE 'tblModels' ('modelsID' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,'makeKey' INTEGER, 'modelName' TEXT, 'modelKey' INTEGER)";

        Cursor cursor = dbLocals.executeRawQuery(deleteQuery, null);
        cursor.moveToFirst();
        cursor = dbLocals.executeRawQuery(createQuery, null);
        cursor.moveToFirst();

        try {
            JSONArray dicRecordSet  = dict.getJSONArray("Recordset");
            JSONObject dicRecords = dicRecordSet.getJSONObject(0);
            JSONArray arrRecords = dicRecords.getJSONArray("Record");


            for (int i = 0; i < arrRecords.length(); i++) {
                JSONObject record = arrRecords.getJSONObject(i);
                insertQuery = "INSERT INTO 'tblModels' VALUES(" + null +  ", "
                        + record.getString("MODMAKlMakeKey") + ", '"
                        + record.getString("MODvc50Name").replaceAll("'", "''") + "', "
                        + record.getString("MODlModelKey")
                        +")";
                cursor =  dbLocals.executeRawQuery(insertQuery, null);
                cursor.moveToFirst();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }

        cursor.close();
    }

My database a manager returns a cursor.

public Cursor executeRawQuery(String query, String[] selectionArgs) {
        Cursor cursor = databaseConn.rawQuery(query, selectionArgs);
        return cursor;
    }

What am I doing wrong?

Aucun commentaire:

Enregistrer un commentaire