0
我有舊的遺留代碼,我不想重寫,我使用gson和io.gsonfire做特殊的json映射到我的java類。我只想將Datasnapshot轉換爲json字符串,以便我可以使用其他實現。我將無法使用Datasnapshot.getValue(SomeClass.class),因爲我的變壓器是特殊的。自己的Firebase解串器
public class BlockTypeSelector {
public Gson createGson(){
GsonFireBuilder builder = new GsonFireBuilder()
.registerTypeSelector(AbstractPhrase.class, new TypeSelector<AbstractPhrase>() {
@Override
public Class<? extends AbstractPhrase> getClassForElement(JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("dotted");
if(element != null){
return DottedFillPhrase.class;
}
return Phrase.class;
}
})
.registerTypeSelector(AbstractParagraph.class, new TypeSelector<AbstractParagraph>() {
@Override
public Class<? extends AbstractParagraph> getClassForElement(JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("cells");
if(element != null){
return TableParagraph.class;
}
element = readElement.getAsJsonObject().get("padding");
if(element != null){
return TableCell.class;
}
element = readElement.getAsJsonObject().get("fill");
if(element != null){
return FillParagraph.class;
}
return Paragraph.class;
}
})
.registerTypeSelector(BaseElement.class, new TypeSelector<BaseElement>() {
@Override
public Class<? extends BaseElement> getClassForElement(JsonElement readElement) {
JsonElement element = readElement.getAsJsonObject().get("type");
if(element == null){
throw new JsonSyntaxException("You must have a type in block");
}
String kind = element.getAsString();
if(kind.equals("LINE")){
return Line.class;
}else if(kind.equals("BLOCK")) {
return Block.class;
}else if(kind.equals("IMAGE")) {
return Image.class;
}else if(kind.equals("QR")) {
return QRCode.class;
}else if(kind.equals("BARCODE")) {
return Barcode.class;
} else {
return null; //returning null will trigger Gson's default behavior
}
}
});
return builder.createGson();
}
}
那麼如何讓這樣的事情
{ key = 787878, value = {document={pages={0={blocks={0={position={3=60.1, 2=50, 1=28.95, 0=25.6}, useAscender=true, type=BLOCK, border={thickness=0.1}}}}}, name=22323}} }
爲JSON字符串的指針?我的擔憂是3:60和那些東西。我怎麼知道它是一個數組而不是「3」:「60」json?
DataSnapshot讓我無法序列化我的對象。 – Edgesoft
你必須使用它的API(我鏈接到)來獲取它裏面的值。 getChildren(),child()和value()都是你需要的。 –