Есть ли у Cursor автономные данные или это только указатель на данные? - PullRequest
1 голос
/ 06 апреля 2011

Я получаю все электронные письма, присутствующие в клиенте Gmail:

final Cursor messages = getContentResolver().query(
          Uri.parse("content://gmail-ls/conversations/" + mailAddress + "/"
                     + String.valueOf(conversationId) + "/messages"), null, null, null,
                     null);

Есть проблема ... Иногда, когда клиент Gmail пытается узнать, пришло ли новое письмо, и я читаю втем временем вышеупомянутый курсор, Gmail аварийно завершает работу с «IndexOutOfBoundException».Это происходит один раз более сотни раз ... в 1% случаев, больше.

Первый вопрос: Я попытаюсь скопировать сообщения Курсор в новый Курсор, называемый copyCursur.

Я не знаю, правильно ли это решение: например, когда я звоню

messages.moveToLast();
  • A.он читает непосредственно из "content: // gmail-ls / разговор /"

  • B.или messages - это копия данных, содержащихся в "content: // gmail-ls /alks / /"?

, потому что, если A, возможно, мое решение будет выиграно.В противном случае, если B, мое решение, безусловно, неверно.

Второй вопрос : как дублировать курсор?Правильно ли, если я сделаю:

Cursor copyMessages = new Cursor();
copyMessages = messages;

или, таким образом, у меня есть только то, что copyMessages является «указателем» на сообщения?

Большое спасибо!

1 Ответ

1 голос
/ 06 апреля 2011

Это указатель.Если вы хотите перебрать кэшированные данные, используйте класс ContentQueryMap.

...