我又来了,抱歉:)
我使用 dom 解析器从 Web 获取 xml 并解析它并将数据放入数据库中。一切都很好,但是我对 xml 位于 Web 上的文件夹进行了基本身份验证...
在它像这样工作之前:
final String URL = getString(R.string.url);
// XML node keys
final String KEY_ITEM = "plan"; // parent node
final String KEY_NAME = "agent";
final String KEY_DATE = "date";
final String KEY_SHIFT = "shift";
final String KEY_LINE = "line";
XMLhandler parser = new XMLhandler();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// empty table
db.dropData("plan");
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
String name = parser.getValue(e, KEY_NAME);
String date = parser.getValue(e, KEY_DATE);
String shift = parser.getValue(e, KEY_SHIFT);
String line = parser.getValue(e, KEY_LINE);
db.createList(name, date, shift, line); // add to db
}
如何对此进行身份验证?我知道我应该使用类似的东西:
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"user", "password".toCharArray());
}
});
从我浏览这个论坛和谷歌...但到目前为止还没有运气,我不明白java那么好(仍在学习)我该怎么做?我的意思是如何在对解析器进行身份验证后获取 xml,我最终得到了流并且解析器想要字符串...
我知道我可能没有多大意义:)
弗拉德。
最佳答案
我已经做到了!花了大约 4 个小时来学习并弄清楚它......并且进行了大量的谷歌搜索:D
但我是这样做的,也许有人也可以使用它:
URI lUri = new URI(getString(R.string.url)); //get url from strings
// XML node keys
final String KEY_ITEM = "plan"; // parent node
final String KEY_NAME = "agent";
final String KEY_DATE = "date";
final String KEY_SHIFT = "shift";
final String KEY_LINE = "line";
XMLhandler parser = new XMLhandler();
// Prepares the request
HttpClient lHttpClient = new DefaultHttpClient();
HttpGet lHttpGet = new HttpGet();
lHttpGet.setURI(lUri);
lHttpGet.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("user", "pass"), "UTF-8", false));
// Sends the request and read the response
HttpResponse lHttpResponse = lHttpClient.execute(lHttpGet);
InputStream lInputStream = lHttpResponse.getEntity().getContent();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(lInputStream);
Element root = dom.getDocumentElement();
NodeList nl = root.getElementsByTagName(KEY_ITEM);
// pass data to another function...
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
String name = parser.getValue(e, KEY_NAME);
String date = parser.getValue(e, KEY_DATE);
String shift = parser.getValue(e, KEY_SHIFT);
String line = parser.getValue(e, KEY_LINE);
db.createList(name, date, shift, line);
}
到目前为止,我认为这不是最好的解决方案,但是嘿!它的工作:)
关于java - 从身份验证后的 Web 获取 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037734/