“在反序列化时映射,但得到了一个类java.util.ArrayList
”异常。
我一直在四处查看,甚至使用HashMap
更改所有模型immementation,而根本不使用任何ArrayList
,但仍然得到了相同的结果。
以下是我的模型:
public class DevicesController {
public DevicesCollection devices;
public int numberOfport;
String timerStatus;
public DevicesController(){
devices = new DevicesCollection();
timerStatus = "UPDATED";
}
public DevicesController(int numberOfport){
devices = new DevicesCollection();
this.numberOfport = numberOfport;
timerStatus = "UPDATED";
}
public ArrayList<Integer> getCurrentState(String in){
ArrayList<Integer> currentState = new ArrayList<Integer>();
for(int i = 0; i < numberOfport; i++){
currentState.add(0);
}
Iterator it = this.getDevices().getAllDevices().entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next();
Device temp =(Device)pair.getValue();
if(temp.isOn()){
currentState.set(temp.getPort(),1);
}else if(!temp.isOn()){
currentState.set(temp.getPort(),0);
}
}
return currentState;
}
public String getStringCurrentState(String in){
ArrayList<Integer> currentState = getCurrentState("");
String temp ="";
for(int i = 0; i < currentState.size();i++){
temp.concat(""+currentState.get(i));
}
return temp;
}
public void updateToDb(){
Global.dbMRoot.child("devicesController").setValue(this);
}
public DevicesCollection getDevices() {
return devices;
}
public int getNumberOfport() {
return numberOfport;
}
}
public class Category {
public String name;
public HashMap<String,String> devicesId;
public DeviceAlarm categoryAlarm;
public Category(){
}
public Category(String name) {
devicesId = new HashMap<String,String>();
this.name = name;
}
public void addDevice(Device dev){
devicesId.put(dev.getId(),dev.getId());
}
public void removeDevice(Device dev){
devicesId.remove(dev.getId());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HashMap<String,String> getDevicesId() {
return devicesId;
}
public void setDevicesId(HashMap<String,String> devicesId) {
this.devicesId = devicesId;
}
}
public class Device {
public String id;
public int port;
public String name;
public boolean on;
public DeviceAlarm alarm;
public Device(){
}
public Device(String id,String name){
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
updateToDb();
}
public String getName() {
return name;
}
public void setName(String name) {
updateToDb();
this.name = name;
}
public boolean isOn() {
return on;
}
public void setOn(boolean on) {
updateToDb();
this.on = on;
}
public void updateToDb(){
Global.dbMRoot.child("devicesController").child("devices").child("allDevice").child(""+id).setValue(this);
}
public DeviceAlarm getTimer() {
return alarm;
}
public int getPort() {
return port;
}
public void setPort(int port) {
updateToDb();
this.port = port;
}
public DeviceAlarm getAlarm() {
return alarm;
}
public void setAlarm(DeviceAlarm alarm) {
Global.dbMRoot.child("devicesController").child("timerStatus").setValue("CHANGED");
this.alarm = alarm;
updateToDb();
}
public void setAlarm(boolean active, Calendar timeOn, Calendar timeOff) {
Global.dbMRoot.child("devicesController").child("timerStatus").setValue("CHANGED");
DeviceAlarm temp = new DeviceAlarm();
temp.setTimeOff(timeOff);
temp.setTimeOn(timeOn);
this.alarm = temp;
updateToDb();
}
}
package com.lucerna.afgadev.lucerna_maincontroller.Models;
import com.lucerna.afgadev.lucerna_maincontroller.Global;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Created by aufa on 06/07/2016.
*/
public class DevicesCollection {
public HashMap<String,Device> allDevices;
public HashMap<String,Category> categories;
int lastId;
public DevicesCollection(){
categories = new HashMap<String,Category>();
lastId = 0;
allDevices = new HashMap<String, Device>();
}
public HashMap<String,Category> getCategories() {
return categories;
}
public HashMap<String,Device> getAllDevices() {
return allDevices;
}
public void addCategory(String name){
categories.put(name,new Category(name));
}
public void removeCategory(String name) throws Exception{
int index = -1;
for(int i = 0; i< categories.size(); i++){
if(categories.get(i).getName().equals(name)){
index = 1;
}
}
if(index == -1){
throw new Exception("Category not found");
}else{
categories.remove(index);
}
updateToDB();
}
public void updateToDB(){
Global.dbMRoot.child("devicesController").child("devices").setValue(this);
}
public Category findCategory(String name){
Category temp = null;
for(int i = 0; i< this.getCategories().size(); i++){
if(this.getCategories().get(i).getName().equals(name)){
temp = this.getCategories().get(i);
}
}
return temp;
}
public void switchCategory(String name, boolean on){
Category cat = findCategory(name);
for(int i = 0; i < cat.getDevicesId().size();i++){
}
}
public void addDevice(String name, int port){
Device temp = new Device();
temp.setPort(port);
temp.setName(name);
allDevices.put(""+lastId,temp);
this.lastId++;
Global.dbMRoot.child("devicesController").child("devices").child(""+lastId).setValue(allDevices.get(lastId));
}
public void removeDevice(int id){
allDevices.remove(id);
updateToDB();
}
public void setCategoryDevicesAlarm(DeviceAlarm da){
}
}
感谢所有的评论和回答!
我有一个部分的答案,但需要弗兰克的专业知识来解释到底发生了什么。
在9.2.0版本中运行发布的代码,我注意到alldevices
的hashmap
存储为JSON数组:
public class DevicesCollection {
public HashMap<String,Device> allDevices; <-- this is stored as array
public HashMap<String,Category> categories;
int lastId;
在AUFA发布的JSON中可以看到这一点:
{
"devicesController" : {
"devices" : {
"allDevices" : [ { <-- note bracket
"name" : "",
"on" : true,
"port" : 0
}, {
这似乎是因为alldevices
元素的键是整数形式的字符串。这是将条目添加到AllDevices
映射的代码:
public void addDevice(String name, int port){
Device temp = new Device();
temp.setPort(port);
temp.setName(name);
allDevices.put(""+lastId,temp); <-- Note that lastId is an integer
this.lastId++;
Global.dbMRoot.child("devicesController").child("devices").child(""+lastId).setValue(allDevices.get(lastId));
}
allDevices.put("ID"+lastId,temp);
getValue(DevicesCollection.class);
编辑:想出来了,如果你有类似的问题,检查我发布的答案。 我知道关于这个问题有几个问题,但他们的解决方案都不适合我。 在我的模型类中,我确保使用List而不是Arraylist来避免Firebase问题,但我仍然收到这个错误。这是很多代码,但大多数问题都要求所有代码,所以我将全部发布。 TemplateModelClass。Java语言 我已经成功地使用了这个基本模型很多次。对于 字符串是转换为字符
我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio
可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)
我的POJO是:
目前,我正在使用Avro1.8.0序列化/反序列化对象,但面临一些问题,特别是java.util.Map对象。不面临其他类型对象的问题。 这里的示例代码- 在deserialize方法中,我试图根据输入数据获取模式,但avro抛出错误- 多谢了。