我在Android中遇到以下问题:我将一些数据存储为Couchbase lite文档中的ArrayList:
ArrayList<FluxDocReg> list_flux = (ArrayList<FluxDocReg>)doc.getProperty("flux");
if (list_flux == null)
list_flux = new ArrayList<FluxDocReg>();
FluxDocReg flux = new FluxDocReg();
//.....
list_flux.add(flux);
//save 'list_flux' in document
...
所以直到我有一个LinkedHashedMap对象的ArrayList而不是FluxDocReg。
接下来,我读了这个属性:
if (documentBD != null && documentBD.getProperty("flux") != null)
{
ArrayList<FluxDocReg> list_flux = ArrayList<FluxDocReg>)documentBD.getProperty("flux");
///*****there are some objects in ArrayList, each of type LinkedHashedMap instead of FluxDocReg
for (int i = 0; i < list_flux.size(); i++)
{
****ERROR**** FluxDocReg flux = (FluxDocReg)list_flux.get(i);
}
}
我在尝试施放时遇到错误&#34; FluxDocReg flux =(FluxDocReg)list_flux.get(i)&#34;
我知道ArrayList中有一些对象,每个对象都是LinkedHashedMap而不是FluxDocReg ......
我做错了什么以及如何解决?
谢谢, 克特林
答案 0 :(得分:0)
显然有一些叫做“Java Type Erasure”的东西用于泛型(泛型列表),所以我不得不提供一个解决方法。像这样的东西,包括反射和转换到JSON:
List<FluxDocRegInfo> list_flux = null;
if (obj != null) {
//USING REFLECTION FOR AVOIDING TYPE ERASURE
Type listType = new TypeToken<ArrayList<FluxDocRegInfo>>() {}.getType();
list_flux = new Gson().fromJson(obj.toString(), listType);
}
else //flux is null
{
list_flux = new ArrayList<FluxDocRegInfo>();
}
///add something to the list
list_flux.add(flux);
JsonElement element = new Gson().toJsonTree(list_flux, new com.google.common.reflect.TypeToken<List<FluxDocRegInfo>>() {}.getType());
JsonArray jsonArray = element.getAsJsonArray()