我正在努力捕获标签中包含的元素的顺序。这是所有代码:
联盟.java:
@Root
@Convert(value = LeagueConverter.class)
public class League
{
@Attribute
private String name;
@Element(name="headlines", required = false)
private Headlines headlines;
@Element(name="scores", required = false)
private Scores scores;
@Element(name="standings", required = false)
private Standing standings;
@Element(name="statistics", required = false)
private LeagueStatistics statistics;
public List<String> order = new ArrayList<String>();
// get methods for all variables
}
LeagueConverter.java:
public class LeagueConverter implements Converter<League>
{
@Override
public League read(InputNode node) throws Exception
{
League league = new League();
InputNode next = node.getNext();
while( next != null )
{
String tag = next.getName();
if(tag.equalsIgnoreCase("headlines"))
{
league.order.add("headlines");
}
else if(tag.equalsIgnoreCase("scores"))
{
league.order.add("scores");
}
else if(tag.equalsIgnoreCase("statistics"))
{
league.order.add("statistics");
}
else if(tag.equalsIgnoreCase("standings"))
{
league.order.add("standings");
}
next = node.getNext();
}
return league;
}
@Override
public void write(OutputNode arg0, League arg1) throws Exception
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
XML 示例:
<android>
<leagues>
<league name ="A">
<Headlines></Headlines>
<Scores></Scores>
...
</league>
<league name ="B">...</league>
</leagues>
</android>
我如何称呼它并期望它的行为:(片段)
Android android = null;
Serializer serial = new Persister(new AnnotationStrategy());
android = serial.read(Android.class, source);
Log.i("Number of leagues found ",tsnAndroid.getLeagueCount() + ""); // prints fine
League nhl = tsnAndroid.getLeagues().get(0); // works fine
// DOES NOT WORK throws NullPointerEx
League nhl2 = tsnAndroid.getLeagueByName("A");
// DOES NOT WORK throws NullPointerEx
for(String s : nhl.getOrder())
{
Log.i("ORDER>>>>>", s);
}
问题:
android.getLeagueByName()
(与@Attribute
名称一起工作)当我设置转换器时突然停止工作,所以它就像下面的 from League.java
,永远不会被设置。
@Attribute
private String name; // not being set
但是,当我注释掉转换器声明时League.java
- 每个联赛都有一个名为 name 的属性并android.getLeagueByName()
开始正常工作......
@Convert for League 是否会以某种方式干扰 League 中的 @Attribute?