2010-07-27 3 views
2

저는 _id = 0 및 value = "SomeString"열을 가진 1 행 테이블로 나타내는 하나의 상수 문자열로 구성된 컨텐트를 제공하는 사용자 정의 ContentProvider를 작성하고 있습니다. 이 문자열은 데이터베이스에 저장되지 않으므로 위에서 설명한 것과 같이 동작하는 데 필요한 모든 작업을 수행하는 CrossProcessCursor의 하위 클래스를 개발했습니다.사용자 정의 ContentProvider의 fillWindow() 메소드에서 수행 할 작업은 무엇입니까?

는 CrossProcessCursor에 대한 문서는 매우 희소하고 정말 fillWindow() 메소드가 명백한 이상 일을해야하는지 설명하지 않습니다. CursorWindow의 방법의 설명을 바탕으로, 나는 그것을 커버해야한다고 생각하는는 함께 다음 넣어 :

예상대로, 그것은 POS로 호출되는
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); 
    } 
} 

= 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)... 

사람이이 방법은 클라이언트에 올바른 보이는 행을 반환하는 일을해야 무엇에 도움이 되거 수 : 그것은 첫 번째 (유일한) 행 후 이동하려고 시도 예외가 발생?

감사합니다. 당신이 MatrixCursor을 확인해야 무슨 일을하는지에 대한

답변

1

. 모든 객체에 toString을 호출하는 AbstractCursor#fillWindow 구현을 사용합니다. 어쨌든 문자열을 보내는 중이므로 잘 작동합니다.

+0

감사합니다. 아직도 CrossProcessCursor 기반 클래스가 실패하는 이유를 알고 싶지만 다른 시간 동안 그 클래스를 떠날 것입니다. – Blrfl

관련 문제