当使用getter时,返回null值
问题描述:
我试图理解我在这里做错了什么,但它对我来说真的没有意义。 我有一个类calleld LatLongBean 在这里我试图解析一个XML提要。当使用getter时,返回null值
我有一个方法,我做所有的逻辑。 和我有一些getters和setter。
这似乎是制定者工作,但吸气剂不工作。
这是LatLongBean:
public class LatLongBean {
private String lat;
private String lng;
private String address;
private String url = "http://maps.googleapis.com/maps/api/geocode/xml?address=";
public void LatLongBean(String address, String lat, String lng) throws ParserConfigurationException, SAXException, IOException {
this.address = address;
this.lat = lat;
this.lng = lng;
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new URL(url + address + "&sensor=false").openStream());
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("location");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
lat = getValue("lat", element);
lng = getValue("lng", element);
}
}
}
private static String getValue(String tag, Element element) {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
return node.getNodeValue();
}
public String getLat() {
System.out.println(lat);
return lat;
}
public String getLng() {
System.out.println(lng);
return lng;
}
public void setAddress(String address) {
this.address = address;
}
}
,这是我做什么使用这个类:
LatLongBean latLong1 = new LatLongBean();
latLong1.setAddress("Amsterdam");
latLong1.getLat();
latLong1.getLng();
的吸气剂返回null!
当我做了LatLongBean方法不是void和使用,因为它就像一个魅力构造:
LatLongBean latLong1 = new LatLongBean("Amsterdam");
latLong1.getLat();
latLong1.getLng();
有人能帮助我吗?
Thanx提前!
答
您并未调用public void LatLongBean(String address, String lat, String lng)
方法,它解析并设置值作业。
是啊这是一种方法。如果您想要成为构造函数,则应从中删除返回类型void
。像下面
public LatLongBean(String address, String lat, String lng) {
// your constructor logic
}
并调用它像
LatLongBean latLong1 = new LatLongBean("http://youraddress.com/xml","a","b");
latLong1.setAddress("Amsterdam");
latLong1.getLat();
latLong1.getLng();
编辑:也在你应该是构造代码更改以下行这样
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
this.lat = getValue("lat", element); // not using this will not write the Document read value to the class variable lat and lng, instead it writes to the parameter itself
this.lng = getValue("lng", element);
}
你的代码”已发布甚至不会编译,因为你调用'new LatLongBean()'而不传递一个地址,并且你还没有声明这样一个con structor。编辑:啊 - 我没有发现它实际上不是一个构造函数。伊克! – 2013-05-10 05:37:24
“lat”和“lng”完全没有被初始化。如果'node.getNodeType()== Node.ELEMENT_NODE'对于任何'node'都不是真的,那么它们都不会被初始化。 – Yuushi 2013-05-10 05:39:35
确实。 Java默认构造函数仅在未指定任何其他构造函数的情况下生成,或者显然已将其包含在类定义中。在这一点上,我怀疑你的Getter是看到代码的问题,但是检索值。一个重要的说明,代码不会做你想做的事情。如果有多个Amsterdams,就像您的示例一样,只有结果列表中最后一个阿姆斯特丹的位置可供您使用。由于这是很少受欢迎的城市,因此您的代码可能不像预期的那样行事! – Eric 2013-05-10 05:46:23