Android 使用SAX解析从XML检索数据时,只会重定时第一个和最后一个值
我正在解析来自如下所示的web服务的数据:我只能解析status和bal这两个值,接下来是null指针异常。 我只能检索状态和名称。有人能告诉我这有什么问题吗。我越来越 status=1正确,bal=Finn,其余为null XML: } 塞特-盖特: 公共类站点列表1{Android 使用SAX解析从XML检索数据时,只会重定时第一个和最后一个值,android,Android,我正在解析来自如下所示的web服务的数据:我只能解析status和bal这两个值,接下来是null指针异常。 我只能检索状态和名称。有人能告诉我这有什么问题吗。我越来越 status=1正确,bal=Finn,其余为null XML: } 塞特-盖特: 公共类站点列表1{ private String status; private String bal; private String cur; private String acc; private String fname; private
private String status;
private String bal;
private String cur;
private String acc;
private String fname;
private String lname;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getBal() {
return bal;
}
public void setBal(String bal) {
this.bal = bal;
}
public String getCur() {
return cur;
}
public void setCur(String cur) {
this.cur = cur;
}
public String getAcc() {
return acc;
}
public void setAcc(String acc) {
this.acc = acc;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
}问题出在您的
字符方法中。您没有正确重置当前值。请尝试以下方法:
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
currentValue.append(ch, start, length);
}
public void startDocument() throws SAXException {
super.startDocument();
currentValue= new StringBuilder();
}
然后,在endElement
方法中,可以执行以下操作:
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
if (localName.equalsIgnoreCase("status"))
sitesList1.setStatus(currentValue.toString());
else if (localName.equalsIgnoreCase("bal"))
sitesList1.setBal(currentValue.toString());
else if (localName.equalsIgnoreCase("cur"))
sitesList1.setCur(currentValue.toString());
else if (localName.equalsIgnoreCase("acc"))
sitesList1.setAcc(currentValue.toString());
else if (localName.equalsIgnoreCase("fname"))
sitesList1.setFname(currentValue.toString());
else if (localName.equalsIgnoreCase("lname"))
sitesList1.setLname(currentValue.toString());
//flush out the StringBuilder so you can start again
curentValue.setLength(0);
}
我刚刚注意到,在你的if/else声明中,你都称之为“挫折”。你需要打电话给合适的设定者。
private String status;
private String bal;
private String cur;
private String acc;
private String fname;
private String lname;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getBal() {
return bal;
}
public void setBal(String bal) {
this.bal = bal;
}
public String getCur() {
return cur;
}
public void setCur(String cur) {
this.cur = cur;
}
public String getAcc() {
return acc;
}
public void setAcc(String acc) {
this.acc = acc;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
currentValue.append(ch, start, length);
}
public void startDocument() throws SAXException {
super.startDocument();
currentValue= new StringBuilder();
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
currentElement = false;
if (localName.equalsIgnoreCase("status"))
sitesList1.setStatus(currentValue.toString());
else if (localName.equalsIgnoreCase("bal"))
sitesList1.setBal(currentValue.toString());
else if (localName.equalsIgnoreCase("cur"))
sitesList1.setCur(currentValue.toString());
else if (localName.equalsIgnoreCase("acc"))
sitesList1.setAcc(currentValue.toString());
else if (localName.equalsIgnoreCase("fname"))
sitesList1.setFname(currentValue.toString());
else if (localName.equalsIgnoreCase("lname"))
sitesList1.setLname(currentValue.toString());
//flush out the StringBuilder so you can start again
curentValue.setLength(0);
}