好的,由于服务器端响应的配置不佳,我很难找到一种有效的方法来编写我的代码。
由于我要传达的示例相当复杂,因此我将尝试使用现实生活中的示例来提供帮助。
因此,假设我负责一项体育奖励计划,并且我正在尝试创建一个“顶级运动员页面”。该页面将显示来自三个运动类别的顶级男女运动员;棒球、篮球和足球。对此的一个转折是,可能只有一名男性获胜者,而没有一名女性获胜者,反之亦然,或者根本没有获胜者。最重要的是,女性只能是棒球运动员或篮球运动员,而男性可以是这三者中的任何一个,或者既是篮球运动员又是足球运动员。没有棒球与其他任何东西的结合。最后,如果男性和女性玩家都存在,则必须首先显示女性。所有三个类别都具有不同的属性,例如足球将具有“tds = 43”属性,而棒球则具有“本垒打 = 32”。
因此,混乱与服务器响应有关:
<player>
<baseballList>
<baseball
name="Adam"
sex="male"
HomeRuns="32"
reward="True"/>
</baseballList>
<basketballList>
<basketball
name="John"
sex="male"
Points="322"
reward="False"/>
<basketball
name="Sandra"
sex="female"
Points="332"
reward="True"/>
</basketballList>
<footballList>
<football
name= doug
Touchdowns= 33
sex=male
reward="false"/>
</footballList>
</player>
(如果球员姓名同时匹配足球和篮球并且是男性,那么您将结合 2)正如您所见,响应是发回我必须过滤掉的不感兴趣的球员(不要问为什么),如以及当玩家进行多项运动时,它不会合并数据。因此,对于我的方法,我有一个 xml 处理程序工厂,它将 xml 发送到指定的“Players”处理程序。这看起来像:
public class PlayerHandler implements XmlHandler {
private static PlayerHandler handler = new PlayerHandler();
private PlayerHandler() {
}
public static PlayerHandler getInstance() {
return handler;
}
public void load(String localName, String qName, Attributes attributes) {
if (localName != null && attributes != null) {
if (localName.equalsIgnoreCase("football")||localName.equalsIgnoreCase("baseball")||localName.equalsIgnoreCase("basketball")) {
Player player = new Player();
if (localName.equalsIgnoreCase("football"))
player.category = "football"
player.TouchDowns=attributes.getValue("TouchDowns");
else if (localName.equalsIgnoreCase("baseball"))
player.HomeRuns=arrtibutes.getValue("HomeRun");
player.category = "baseball"
else{
player.category = "basketball";
player.Points=attributes.getValue("Points");}
player.sex=attributes.getValue("sex");
player.name=attributes.getValue("name");
}
playerSorter.addPlayer(player);}}
我为对象创建了一个类文件:
public class Player implements Serializable{
public String category;
public String rewards;
public String TouchDowns;
public String Points;
public String HomeRuns;
public String sex;
public String Name;
}
我正在使用一个名为“playerSorter”的类进行所有排序,该类使用 addPlayer() 方法,仅在满足指定条件时才填充列表,然后我有一个 getPlayers() 方法,它调用我的 checkForAthleteWithInTwoSports() 方法(通过并查看是否有一个既是篮球又是足球的球员)然后返回一个排序列表,其中女性首先显示(如果适用)。从我的主页调用 getPlayers() 方法,然后将其设置为适配器类。更好的 xml 响应将使这样的任务变得更容易,但事实并非如此,我想找到一种更有效的方法来做到这一点。如果有人能帮助我找到一个好的设计模式来解决这个问题或任何建议,我将不胜感激。(此外,这些类别具有更多的属性,而不仅仅是“本垒打、得分或达阵”