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 回答
0

从文档中, ClassCastException 意味着:

Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance.

由于在您的情况下, document.get 返回一般类型 Object 并且您尝试将其强制转换为 List,因此您会收到此异常。

于 2013-05-09T11:36:52.207 回答