我在android中使用SAX解析器从URL获取xml数据,但我仍然无法获得存储响应的位置。
代码:
String c=city.getText().toString();
String s=state.getText().toString();
StringBuilder URL=new StringBuilder(baseURL);
URL.append(c+","+s);
try{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader reader=parser.getXMLReader();
HandlingXMLStuff handler=new HandlingXMLStuff();
reader.setContentHandler(handler);
URL url = new
URL("http://api.openweathermap.org/data/2.5/weathermode=xml&q="+c+","+s);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
reader.parse(new InputSource(connection.getInputStream()));
String information=handler.getInformation();
output.setText(information);
}
catch(Exception e)
{
output.setText(e.toString());
}
我的问题是存储响应的位置以及如何访问它以从xml获取所需信息?
编辑:非常感谢帮助伙伴们......现在我理解了逻辑......但我面临另一个问题......代码:
String c = city.getText().toString();
String s = state.getText().toString();
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
HandlingXMLStuff handler = new HandlingXMLStuff();
reader.setContentHandler(handler);
String query = URLEncoder.encode(
"http://api.openweathermap.org/data/2.5/weather?mode=xml&q="
+ c + "," + s, "utf-8");
URL url = new URL("http://api.openweathermap.org/data/2.5/weather?mode=xml&q="
+ c + "," + s);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
reader.parse(new InputSource(connection.getInputStream()));
String information = handler.getInformation();
output.setText(information);
} catch (Exception e) {
output.setText(e.toString());
}
我没有收到来自url的响应,得到错误“无法将null解析为int”。知道发生了什么事吗?我在浏览器中输入相同的URL并获得正确的响应但不在此处工作。
编辑:修正。处理函数xD
中的一些错误答案 0 :(得分:0)
feedParser oFeedParser = new feedParser(MainActivity.this);
try {
/**
* Create a new instance of the SAX parser
**/
SAXParserFactory saxPF = SAXParserFactory.newInstance();
SAXParser saxP = saxPF.newSAXParser();
XMLReader xmlR = saxP.getXMLReader();
URL url = new URL("Your_URL"); // URL of the XML
xmlR.setContentHandler(oFeedParser);
xmlR.parse(new InputSource(url.openStream()));
handler.sendEmptyMessage(0);
} catch(IOException e) {
System.out.println(e);
handler.sendEmptyMessage(1);
} catch (Exception e) {
System.out.println(e);
} finally {
oFeedParser.closeDataBase();
}
}
和feedParser类
public class feedParser extends DefaultHandler {
String elementValue = null;
boolean elementOn, isFeedInitialized = false;
feed oFeed;
feedsDAO dao;
public feedParser(Context context) {
dao = new feedsDAO(context);
dao.open();
}
public void closeDataBase() {
dao.close();
}
/**
* This will be called when the tags of the XML starts.
**/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (localName.equals("ITEM_NAME")) {
}
}
/**
* This will be called when the tags of the XML end.
**/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (localName.equals("ITEM_NAME")) {
}
}
/**
* This is called to get the tags value
**/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (elementOn) {
elementValue = new String(ch, start, length);
elementOn = false;
}
}
}