以下是我简单的主要Firebase数据。
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered"
}
}
在我的android项目中,我让这个类来表示这个数据
public class elephant{
private String color;
private int lifespan;
private String status;
// Constructors
public elephant(){
}
public elephant(String color, int lifespan, String status) { . . . }
// Getters and Setters
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
public int getLifespan() { return lifespan; }
public void setLifespan(int lifespan) { this.lifespan = lifespan; }
public String getStatus() { return status; }
public void setStatus(String status) { this.status = status; }
}
这样我就可以调用getValue(elephant.class)方法来检索这些数据。
Elephant ele = datasnapshot.getValue(elephant.class);
有效。
现在我在项目中添加了一个嵌套节点。
{
"elephant" : {
"color" : "gray",
"lifespan" : 48,
"status" : "endangered",
"dimension" : {
"height" : 270,
"length" : 607
}
}
}
我在项目中创建了一个名为Dimension.java的新类:
public class Dimension {
private int length, height;
// Constructors
public Dimension() { }
public Dimension(int length, int height) { . . . }
// Public getters and setters
public int getLength() {return length;}
public void setLength(int length) {this.length = length;}
public int getHeight() {return height;}
public void setHeight(int height) {this.height = height;}
}
我修改了我的elephant.java以包含这个变量/对象:
private Dimension dimension;
和适当的构造函数,getter和setter。
我以前的方法仍然有效。它返回整个数据快照的正确java表示。
Elephant ele = datasnapshot.getValue(elephant.class);
并且,如果我在DatabaseRef.child('dimension')获得数据快照,我可以将dimension.class传递给getValue()方法以获取正确的数据:
Dimension data = datasnapshot.getValue(dimension.class);
因此,这些多功能课对我来说非常方便。
现在,我知道,Firebase数据应该被标准化/展平。但是为了实验,我想说我已经用pushID添加了一些数据。
{
"elephant" : {
"color" : "gray",
"status" : "endangered",
"lifespan" : 48,
"dimension" : {
"height" : 270,
"length" : 607
},
"population" : {
"-KTcpw_SsMb55qLc6Xme" : {
"count" : 210,
"location" : "Bangladesh"
},
"-KTcq6YeB3kX3h9F9xPU" : {
"count" : 428,
"location" : "Bhutan"
},
"-KTcqDySLBAFtCuUc3R4" : {...},
"-KTcqMyy4GULKo6FqPEM" : {...},
"-KTcqWwtli672ROpry8_" : {...},
"-KTcqhnBb6dTN1mA1otW" : {...}
}
}
}
现在,如果我想让以前的代码适用于这种情况:
Elephant ele = datasnapshot.getValue(elephant.class);
如何为'population'节点编写新类。
在Firebase参考中,它表示返回Map<String, Object>
或List<Object>
java等效项。但作为Java的初学者,我在过去4天内遇到了这个问题。
我可以遍历dataSnapshot.child('population')
并将其添加到单独的“population
”对象列表中。但我想知道是否可以通过这种方式实现。请帮我编写代码或链接到一个示例,它在一行中自动完成。这将是一种解脱。
答案 0 :(得分:5)
你可以尝试这个:
class PopulationDetail {
long count;
String location;
}
class Elephan {
...
Map<String, PopulationDetail> population;
...
}
答案 1 :(得分:1)
要将json转换为pojo类,请尝试此操作 -