android中简单的库:Boolean 是“1”还是“0”

这几天我从 soap 服务器中解析了很多不同的XML,但是遇到 boolean 属性是"0" 或者 "1" :

<list mybool1="0" mybool2="1" attr1="attr" attr2="attr">
    <page mybool3="1">
        ...
    </page>
    <page mybool3="0">
        ...
    </page>
    ...
</list>

我创建了下面的类:

public class Boolean01Converter implements Converter<Boolean>
{
    @Override
    public Boolean read(InputNode node) throws Exception {
        return new Boolean(node.getValue().equals("1"));
    }
    @Override
    public void write(OutputNode node, Boolean value) throws Exception {
        node.setValue(value.booleanValue()?"1":"0");
    }
}

在对象定义上实现:

@Root(name="list")
public class ListFcts
{
    @Attribute
    @Convert(Boolean01Converter.class)
    private Boolean mybool1;

    @Attribute
    @Convert(Boolean01Converter.class)
    private Boolean mybool2;

    @Attribute
    private int ...

    @ElementList(name="page", inline=true)
    private List<Page> pages;

    public Boolean getMybool1() {
        return mybool1;
    }
}

但是对于每一 boolean 值还是获得错误的值。
补充一下:
当我用这些代码时:

@Override
public Boolean read(InputNode node) throws Exception {
    return true;
}

依然获得 false:

Serializer serial = new Persister();
ListFcts listFct = serial.read(ListFcts.class, soapResult);
if(listFct.getMybool1())
{
    //永远不会发生
}else{
    //总是如此
}

因此 Converter 没有影响。
如何把转换器放到 Persister,而不用在 @Attributes 上申明很多次?

ChatGPT尝试为您解答,仅供参考
您可以使用@Convert注释来将转换器放在您的对象上,这样就不用在每个@Attribute上单独声明了。

例如:

@Root(name="list")
@Convert(Boolean01Converter.class)
public class ListFcts {
    @Attribute
    private Boolean mybool1;
    @Attribute
    private Boolean mybool2;
    @Attribute
    private int ...
    @ElementList(name="page", inline=true)
    private List<Page> pages;
    public Boolean getMybool1() {
        return mybool1;
    }
}

这样,当您使用Persister对象进行序列化和反序列化时,它会在ListFcts类上查找@Convert注释并使用指定的转换器来转换所有布尔值属性。


请注意,如果您在对象上使用了@Convert注释,则需要确保您的转换器能够处理所有布尔值属性。如果您想要使用多个不同的转换器,则需要使用自定义注解来区分它们。