0

Androidアプリでektorpを使用してTouchDBを使用してCouchDBにアクセスしています

私がアクセスしている json ドキュメントには、一連のカテゴリがあります。

カテゴリ: ['cat1', 'cat2']

ビュー クエリでこの配列にアクセスしようとしていますが、結果のオブジェクトをリストに変換しようとすると ClassCastException が発生します。

 public void map(Map<String, Object> document, TDViewMapEmitBlock emitter) {
           Object dateAdded = document.get("dateAdded");
           Object expiryDate = document.get("expiryDate");
           boolean expired = false;
             if(expiryDate!=null){
                 expired = CompareDate.isItemExpired(expiryDate);
             }
           List<String> test = (List<String>)document.get("categories");

メソッドは.get()、単一の json フィールドに対して正常に機能します。何か案は?

4

4 に答える 4

2

ClassCastException は、返されるオブジェクトの実際の型をdocument.get("categories");教えてくれるので、何にキャストできるかがわかります。

于 2013-05-09T11:26:29.583 に答える
1

ドキュメントは次のように宣言されていますMap<String, Object>

したがって.get()、そうすると、オブジェクトが返されます。

への直接のマッピングはない(List<String>)ため、この例外は、リストではなくオブジェクトにキャストする必要があることを示しています。

値に文字列のリストを保持するように Map を変更できます。これにより、クラス キャスト例外が停止しますが、Map がそのように宣言されている理由を確認する必要があります。

于 2013-05-09T11:26:16.240 に答える
0

ClassCastException につながる文字列のリストに文字列配列をキャストしようとしているようです。むしろ、ループを使用して配列の要素をリストに入れてみてください。

于 2013-05-09T11:24:59.517 に答える