getContentResolver (). вопрос запроса - PullRequest
0 голосов
/ 03 марта 2012

Обе они пропускают мою активность, когда она превышает 1 Мб памяти. Мне нужно удалить более 1 МБ conacts i, e; свыше 2500 контактов.

Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
Cursor cur = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

Что такое альтернатива или обходной путь? Тогда я делаю

if (cur.moveToFirst()) {
        do {
            String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
            Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
            cr.delete(uri, null, null);             
        } while (cur.moveToNext());    
    }
    cur.close(); 

Как можно удалить только 100-200 контактов одновременно? или любым другим способом?

Вход:

03-02 14:26:57.317: E/CursorWindow(5357): need to grow: mSize = 1048576, size = 216, freeSpace() = 135, numRows = 2616
03-02 14:26:57.317: E/CursorWindow(5357): not growing since there are already 2616 row(s), max size 1048576
03-02 14:26:57.317: E/CursorWindow(5357): The row failed, so back out the new row accounting from allocRowSlot 2615
03-02 14:26:57.317: E/Cursor(5357): Failed allocating fieldDir at startPos 0 row 2615

1 Ответ

0 голосов
/ 03 марта 2012

Используйте Loader для запуска запроса в отдельном потоке. Это задокументировано в Руководстве для разработчиков в разделе «Загрузчики». Кстати, managedQuery () устарела.

Вы не должны никогда запускать запрос непосредственно в Activity. Ты повесишь все довольно быстро.

Вы также спрашиваете об удалении контактов, хотя я не вижу никакого кода, который делает это.

Для этого вы должны удалить их с объектами ContentProviderOperation и ContentResolver.applyBatch (). Если вы не хотите делать это в спешке, отметьте каждый из Объекты ContentProviderOperation с "разрешенной доходностью".

ArrayList oparray = new ArrayList;

objBuilder = ContentProviderOperation.newDelete (ContactsContract.Contacts.CONTENT_URI); objBuilder.withYieldAllowed (истина); obj = objBuilder.build ();

oparray.add (OBJ);

getContentResolver (). ApplyBatch (ContactsContract.AUTHORITY, oparray);

Это будет медленно, в зависимости от того, сколько существует данных Контактов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...