Java 测试是否返回空值
在我的应用程序中,我正在解析XML文件-Java 测试是否返回空值,java,android,Java,Android,在我的应用程序中,我正在解析XML文件- Document doc = XMLfunctions.XMLfromString(xml); 使用以下函数 public final static Document XMLfromString(String xml){ Document doc = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try {
Document doc = XMLfunctions.XMLfromString(xml);
使用以下函数
public final static Document XMLfromString(String xml){
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (ParserConfigurationException e) {
System.out.println("XML parse error: " + e.getMessage());
return null;
} catch (SAXException e) {
System.out.println("Wrong XML file structure: " + e.getMessage());
return null;
} catch (IOException e) {
System.out.println("I/O exeption: " + e.getMessage());
return null;
}
return doc;
}
如果一切正常,程序将检查结果的数量。当我遇到格式错误的xml文件时,我的问题就出现了。例如,当WordPress文件中有标签时。发生的是我的应用程序崩溃,当我查看日志时,程序捕获到异常
} catch (SAXException e) {
System.out.println("Wrong XML file structure: " + e.getMessage());
return null;
这很好。现在我要做的是测试null,然后调用finish()返回菜单,而不是面对强制关闭
我用过
if (null==doc){
Toast.makeText(this, "Sorry The XML File " + target +" is Misformed", Toast.LENGTH_SHORT).show();
finish();
}
及
无济于事。处理这类情况的最佳方法是什么
还在寻找
我试过这个
if(XMLfunctions.XMLfromString(xml)==null){
Toast.makeText(this, "Badly Formed File", Toast.LENGTH_LONG).show();
finish();
}
同样的问题-调用后的代码行是
int numResults = XMLfunctions.numResults(doc);
函数代码本身是
public static int numResults(Document doc){
int res = -1;
Node results = doc.getDocumentElement();
try{
res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
}catch(Exception e){
res = -1;
}
return res;
}
返回的初始异常消息是为函数getXML is返回的消息
03-27 12:46:26.917:I/System.out(10311):错误的XML文件结构:预期名称>(位置:java.io中的START_TAG@29:27)。StringReader@405a3d30)
在这一点上,它开始抛出致命的异常如果您将上面发布的代码包装在一个函数中,那么您只需在If循环中调用整个代码即可 if(parseDoc(xml)==null){ Toast.makeText(这个“对不起,XML文件”+target+“格式不正确”,Toast.LENGTH_SHORT.show(); }
如果你的应用程序正确地捕获了异常,它不应该强制关闭,除非你的应用程序中有东西试图访问doc并且得到了空指针。在这种情况下,异常日志将非常有用。如果您将上面发布的代码包装在一个函数中,您可以在If循环中调用整个过程,即 if(parseDoc(xml)==null){ Toast.makeText(这个“对不起,XML文件”+target+“格式不正确”,Toast.LENGTH_SHORT.show(); }
如果你的应用程序正确地捕获了异常,它不应该强制关闭,除非你的应用程序中有东西试图访问doc并且得到了空指针。在这种情况下,异常日志将非常有用。我建议向上抛出异常,让调用方处理它们。捕获异常并返回null有点不干净。我建议向上抛出异常,让调用方处理它们。捕获异常并返回null有点不干净。会发生什么?
Toast
是否出现?如果您在这一行前后提供更多的代码,我想回答您的问题会更容易代码>。我的想法是,在你的if(doc==null)
检查之后的某个时候,有东西试图在doc
上调用一个方法。不,应用程序force closesPeter,下一行代码是int-numResults=XMLfunctions.numResults(doc);会发生什么?Toast
是否出现?如果您在这一行前后提供更多的代码,我想回答您的问题会更容易代码>。我的想法是,在你的if(doc==null)
检查之后的某个时候,有东西试图在doc
上调用一个方法。不,应用程序force closesPeter,下一行代码是int-numResults=XMLfunctions.numResults(doc);下一行代码试图访问doc,该行是int numResults=XMLfunctions.numResults(doc);如果您对我的回答满意,请接受我的建议,这样我就可以得到代表=),因为下一行试图对返回的文档执行某些操作,我敢打赌,您在该调用中实际得到的异常是一个空指针;如果您对我的答案感到满意,请接受我的建议,这样我就可以得到代表=)鉴于下一行试图对返回的文档执行某些操作,我敢打赌您实际得到的异常是该调用中的空指针。
public static int numResults(Document doc){
int res = -1;
Node results = doc.getDocumentElement();
try{
res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue());
}catch(Exception e){
res = -1;
}
return res;
}