2011-09-30 62 views
3

簡單的圖書館是偉大的,我已經解析了很多 不同的XML從肥皂服務器以來3天,但我遇到 布爾屬性與「0」或「1 「:簡單的圖書館Android:布爾在「1」或「0」

<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; 
    } 
} 

但我仍然得到每個布爾值爲false。

[edit] 事實上,當我這樣做:

@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()) 
{ 
    //this never happens 
}else{ 
    //this is always the case 
} 

,所以我的轉換器有沒有影響?

另外:如何我可以將轉換器附加到Persister而不是 在@Attributes上聲明它一百次?

非常感謝提前!

[edit2]

我放棄與轉換器,這是我自己的解決方案:

@Root(name="list") 
public class ListFcts 
{ 
    @Attribute 
    private int mybool1; 

    @Attribute 
    private int mybool2; 

    public int getMybool1() { 
     return mybool1; 
    } 

    public Boolean isMybool1() { 
     return (mybool1==1)?true:false; 
    } 

    ... 
} 

回答

0

我放棄了用轉換器,我聽說變換,但沒有找到如何使用它,所以這是我自己的基本解決方案:

@Root(name="list") 
public class ListFcts 
{ 
    @Attribute 
    private int mybool1; 

    @Attribute 
    private int mybool2; 

    public int getMybool1() { 
     return mybool1; 
    } 

    public Boolean isMybool1() { 
     return (mybool1==1)?true:false; 
    } 

    ... 
} 
2

你的代碼使用node.getValue()它返回(讀:內容)每個XML節點(在「...」在你的例子中)。

你需要做的是閱讀的屬性值,像node.getAttributeValue("mybool1").equals("1")

+0

我剛剛檢查了新值爲「0」和「1」的新布爾(字符串)和布爾值的行爲(字符串)......它不解析這些。按照上面的方法來解決這個問題。 –

+0

getAttribute(「mybool1」)是最糟糕的,因爲它們中有很多... – Darkendorf

+0

或者我可以使用switch語句? – Darkendorf