我正在制作一个我必须进行XML解析的应用程序。
我必须检查用户是否能够访问新数据,然后我必须删除数据库中的旧数据。
对于上述内容,我使用以下代码:
try{
URL url = new URL(address);
/* Get a SAXParser from the SAXPArserFactory. */
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
/* Get the XMLReader of the SAXParser we created. */
XMLReader xr = sp.getXMLReader();
/* Create a new ContentHandler and apply it to the XML-Reader */
xr.setContentHandler(this);
/* Parse the xml-data from our URL. */
InputSource is = new InputSource(url.openStream());
//once data is obtained then delete the table.
hb.executeSql("DELETE FROM Products,Category");
xr.parse(is);
}
catch{
e.printstacktrace();
}
如果输入流中有错误,那么将抛出一个我正在捕获的异常,并且永远不会执行删除该表的代码。
逻辑是否正确?
答案 0 :(得分:0)
你的拦截障碍是错误的。请参阅java中的处理异常。
语法是:
try{
// do your logic here.
}catch (Exception e){
e.printStackTrace();
}
finally{
// do something if there is or isnt an exception
}
如果存在异常,它将跳转到catch代码,这意味着您可以添加用于删除旧数据的代码作为catch块之前的最后一行,然后如果它上面的所有内容都运行而没有异常,您的代码将执行,否则在异常点,它将跳过catch块的所有内容,然后当catch完成后,它将转到finally块并离开try-catch。
答案 1 :(得分:0)
你几乎就在那里,如果url.OpenStream()抛出异常你会抓住它。但要完全放在安全的一面,你需要把
xr.parse(is);
前
hb.exequteSql("Delete...");
因为xr.parse可能会抛出IO或SAX异常,即使发生这种情况,您的代码也会被删除。
for API,请参阅
另外我会建议你单独捕捉,IO和SAX例外。它可以帮助您轻松调试。
答案 2 :(得分:0)
我认为你想通过使用android SAXParser解析xml。这个链接包含如何解析xml
http://www.ctctlabs.com/index.php/blog/detail/parsing_xml_on_android/
答案 3 :(得分:0)
使用tbelow函数,此函数返回布尔值。
public boolean parseResultantXml(String handlerType,String inputXml){
boolean result = false;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp;
XMLReader xr = null;
try {
sp = spf.newSAXParser();
xr = sp.getXMLReader();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
SAXParsersUtil saxParserUtil = new SAXParsersUtil();
RequiredParser rp = saxParserUtil.getParser(handlerType);
xr.setContentHandler(rp);
InputStream in = null;
try {
in = new ByteArrayInputStream(
("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + inputXml)
.getBytes("UTF-8"));
} catch (IOException e) {
e.printStackTrace();
result = false;
}
try {
xr.parse(new InputSource(in));
result = true;
} catch (IOException e) {
e.printStackTrace();
result = false;
} catch (SAXException e) {
e.printStackTrace();
result = false;
}
return result;
}