如何使用Map <string,obect =“”>或List <object>类在Java中反编译嵌套的Firebase数据库?

时间:2016-10-11 02:54:11

标签: android json firebase firebase-realtime-database

以下是我简单的主要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
    }
  }
}

database Image

我在项目中创建了一个名为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" : {...}
    }
  }
}

Database Screenshot

现在,如果我想让以前的代码适用于这种情况:

Elephant ele = datasnapshot.getValue(elephant.class);

如何为'population'节点编写新类。

在Firebase参考中,它表示返回Map<String, Object>List<Object> java等效项。但作为Java的初学者,我在过去4天内遇到了这个问题。

我可以遍历dataSnapshot.child('population')并将其添加到单独的“population”对象列表中。但我想知道是否可以通过这种方式实现。请帮我编写代码或链接到一个示例,它在一行中自动完成。这将是一种解脱。

2 个答案:

答案 0 :(得分:5)

你可以尝试这个:

class PopulationDetail {
    long count;
    String location;
}

class Elephan {
    ...
    Map<String, PopulationDetail> population;
    ...
}

答案 1 :(得分:1)

要将json转换为pojo类,请尝试此操作 -

http://www.jsonschema2pojo.org/