从Object转换为List <string>:CastClassException </string>

时间:2013-05-09 11:22:17

标签: java android json ektorp touchdb

我在Android应用中使用带有ektorp的TouchDB来访问CouchDB

我正在访问的json文档有一系列类别:

类别:['cat1','cat2']

在视图查询中,我正在尝试访问此数组,但在尝试将结果对象转换为List时,我得到了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 个答案:

答案 0 :(得分:2)

ClassCastException告诉你document.get("categories");返回的对象的实际类型,这样你就能告诉你能把它投射到什么。

答案 1 :(得分:1)

文档声明为Map<String, Object>

所以,当你.get()时,它会返回一个对象。

没有直接映射到(List<String>)所以这个例外就是说你需要将它转换为对象而不是列表。

您可以更改Map以在其值中保存字符串列表,然后这将停止类强制转换异常,但您应该查看为什么按照它的方式声明Map。

答案 2 :(得分:0)

您似乎正在尝试将字符串数组强制转换为导致ClassCastException的字符串列表。相反,你应该尝试使用循环将数组元素放在列表中。

答案 3 :(得分: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,你会得到这个异常。