Java 使用getter时返回null的值
我试图理解我在这里做错了什么,但这对我来说真的没有意义。 我有一个叫做LatLongBean的类 这里我试图解析一个XML提要 我有一个方法,我做所有的逻辑。 我有一些能手和二传手 看起来二传手在起作用,但接球手却不起作用 这是LatLongBean:Java 使用getter时返回null的值,java,null,latitude-longitude,getter-setter,Java,Null,Latitude Longitude,Getter Setter,我试图理解我在这里做错了什么,但这对我来说真的没有意义。 我有一个叫做LatLongBean的类 这里我试图解析一个XML提要 我有一个方法,我做所有的逻辑。 我有一些能手和二传手 看起来二传手在起作用,但接球手却不起作用 这是LatLongBean: public class LatLongBean { private String lat; private String lng; private String address; private String
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;
}
}
getter返回null
当我使LatLongBean方法不失效,并将其用作构造函数时,它就像一个符咒:
LatLongBean latLong1 = new LatLongBean("Amsterdam");
latLong1.getLat();
latLong1.getLng();
谁能帮帮我吗
先走一步 您没有调用
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);
}
您没有调用
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()
,而没有传递地址,而且您还没有声明这样的构造函数。编辑:啊-我没有发现它实际上不是一个构造函数。哎呀!完全有可能lat
和lng
从未初始化过。如果任何节点
的node.getNodeType()==node.ELEMENT\u node
都不是真的,那么它们都不会被初始化。确实如此。Java默认构造函数只有在您没有指定任何其他构造函数,或者显然已经将其包含在类定义中时才会生成。在这一点上,我怀疑您的Getter是查看代码的问题,而是检索值的问题。一个重要的注意事项是,代码并没有执行您希望它执行的操作。如果有多个阿姆斯特丹,如您的示例所示,则只有结果列表中最后一个阿姆斯特丹的位置可供您使用。因为那很少是比较受欢迎的城市,所以您的代码可能不会像预期的那样运行!Thanx的警告,但我没有困难找到正确的阿姆斯特丹,它只返回1 lat和1 long。我遇到的问题甚至在使用小村庄名称时也会出现。您发布的代码甚至无法编译,因为您正在调用new LatLongBean()
,但没有传递地址,而且您还没有声明这样的构造函数。编辑:啊-我没有发现它实际上不是一个构造函数。哎呀!完全有可能lat
和lng
从未初始化过。如果任何节点
的node.getNodeType()==node.ELEMENT\u node
都不是真的,那么它们都不会被初始化。确实如此。Java默认构造函数只有在您没有指定任何其他构造函数,或者显然已经将其包含在类定义中时才会生成。在这一点上,我怀疑您的Getter是查看代码的问题,而是检索值的问题。一个重要的注意事项是,代码并没有执行您希望它执行的操作。如果有多个阿姆斯特丹,如您的示例所示,则只有结果列表中最后一个阿姆斯特丹的位置可供您使用。因为那很少是比较受欢迎的城市,所以您的代码可能不会像预期的那样运行!Thanx的警告,但我没有困难找到正确的阿姆斯特丹,它只返回1 lat和1 long。我遇到的问题甚至在使用一个小村庄的名字时也会出现。很明显。太可怕了。如果我这样做,getter将返回“a”和“b”。不,您正在覆盖参数,而不在代码中使用它们。此外,您需要确保在代码中使用坐标。现在,您正在将所有位置映射到作为第一个输入参数提供的字符串,并且在遍历结果列表时,仅将最后一个位置分配给变量。@kawa请查看我的新编辑,您应该在阅读文档的值时使用this.lat
,我真的很感谢您的帮助!在变量前面插入这个后,我得到一个结果,但不是setter的结果。当我这样使用它时:LatLongBean latLong1=新的LatLongBean(“a”、“b”、“c”);latLong1.设置地址(“阿姆斯特丹”);我得到了“a”的结果。太可怕了。如果我这样做,getter将返回“a”和“b”。不,您正在覆盖参数,而不在代码中使用它们。此外,您需要确保在代码中使用坐标。现在,您正在将所有位置映射到作为第一个输入参数提供的字符串,并且在遍历结果列表时,仅将最后一个位置分配给变量。@kawa请查看我的新编辑,您应该在阅读文档的值时使用this.lat
,我真的很感谢您的帮助!在变量前面插入这个后,我得到一个结果,但不是setter的结果。当我这样使用它时:LatLongBean latLong1=新的LatLongBean(“a”、“b”、“c”);latLong1.设置地址(“阿姆斯特丹”);我得到“a”的结果