2

私は、列_id=0およびvalue="SomeString"を持つ1行のテーブルとして表す単一の定数文字列で構成されるコンテンツを提供するカスタムContentProviderを作成しています。この文字列はデータベースに保存されないため、上記のように動作するために必要なすべてを実行するCrossProcessCursorのサブクラスを開発しました。

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

誰かが、このメソッドが正しい外観の行をクライアントに返すために何をすべきかを明らかにすることができますか?

ありがとう。

4

1 に答える 1

1

あなたがしていることについては、をチェックする必要がありますMatrixCursor。すべてのオブジェクトAbstractCursor#fillWindowを呼び出す実装を使用します。toStringとにかく文字列を送信しているだけなので、問題なく動作するはずです。

于 2010-07-27T04:40:23.897 に答える