Я пишу пользовательский ContentProvider, который обслуживает контент, состоящий из одной постоянной строки, которую я представляю в виде таблицы из одной строки, имеющей столбцы _id = 0 и value = "SomeString".Эта строка не хранится в базе данных, поэтому я разработал подкласс CrossProcessCursor, который имеет все необходимое для того, чтобы вести себя как я описал выше.Метод fillWindow () должен выходить за рамки очевидного.Основываясь на описании методов CursorWindow, я собрал следующее, которое, как я думал, должно охватить это:
public class MyCursor implements CrossProcessCursor {
...
public void fillWindow(int pos, CursorWindow window) {
if (pos != 0) { // There's only one row.
return;
}
window.clear();
window.allocRow(); // TODO: Error check, false = no memory
window.setNumColumns(2);
window.setStartPosition(0);
window.putLong(0, 0, 0);
window.putString("SomeString", 0, 1);
}
}
Как и ожидалось, он вызывается с pos = 0, когда клиентское приложение запрашивает содержимое, ноклиентское приложение выдает исключение при попытке перейти после первой (и единственной) строки:
Caused by: java.lang.IllegalStateException: UNKNOWN type 48
at android.database.CursorWindow.getLong_native(Native Method)
at android.database.CursorWindow.getLong(CursorWindow.java:380)
at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:108)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:194)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
at android.database.CursorWrapper.moveToFirst(CursorWrapper.java:86)
...(Snipped)...
Может ли кто-нибудь пролить свет на то, что должен делать этот метод, чтобы вернуть клиенту корректно выглядящую строку?
Спасибо.