我在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字段。有什么想法吗?
答案 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,你会得到这个异常。