java List里面放HashMap出现问题

我是把xml中一条记录解析为HashMap后添加到List返回
sax.xml

<?xml version="1.0" encoding="utf-8"?>
<root>
<data>
<id>1</id>
<name>周春</name>
<sex>男</sex>
<age>25</age>
</data>
<data>
<id>2</id>
<name>肖西锋</name>
<sex>男</sex>
<age>20</age>
</data>
</root>
sax.java

package com.durenyuan.tool;
import java.util.*;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class sax extends DefaultHandler{
private String tag="";
private HashMap hm=new HashMap();
private List<HashMap> list;
public void parse(String filename){
try{
SAXParserFactory sf=SAXParserFactory.newInstance();
SAXParser sp=sf.newSAXParser();
sax reader=new sax();
sp.parse(new InputSource(filename),reader);
}
catch(Exception e){}
}
public void characters(char ch[],int start,int length) throws SAXException{
String value=new String(ch,start,length);
if(tag!="root" && tag!="data" && tag!=""){hm.put(tag,value);}
}
public void startElement(String uri,String localName,String qName,Attributes attrs){
tag=qName;
}
public void endElement(String uri,String localName,String qName) throws SAXException{
tag="";
if(qName.equals("data")){add();}
}
public void add(){
System.out.println("hm:"+hm.size());
list.add(hm);
hm.clear();
System.out.println("list:"+list.size());
}
public List<HashMap> get_xml_by_sax(){return list;}
public void startDocument() throws SAXException{}
public void endDocument() throws SAXException{}
}
test.java片段

sax s=new sax();
s.parse("sax.xml");
List<HashMap> list=s.get_xml_by_sax();
System.out.println(list.size());
运行结果
hm:4
Exception in thread "main" java.lang.NullPointerException at test.main(test.java:31)

问题很显然NullPointerException 空指针异常 ,private HashMap hm=new HashMap(); 定义时你都初始化啦,private List<HashMap> list;定义时干嘛不赋值,初始化一下。
修改:private List<HashMap> list=new new ArrayList<HashMap>();
调试一下很容易解决,解决后还麻烦设为满意答案哦!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-13
System.out.println("hm:"+hm.size());

size 是空的追问

第一次输出4表示对的,应该是list.add(hm);没加进去啊

追答

你把add方法中加入 hm这个参数

追问

我不就是这样加的吗

追答

你这样加的话 hm 会调用全局的变量,而不是你上一个方法中的hm局部变量

追问

hm一直是全局变量啊,你仔细看看好吗

第2个回答  2012-07-14
3rt
相似回答