【发布时间】:2018-02-24 08:10:12
【问题描述】:
我正在尝试从 xml 文件填充数据库。它工作得很好,但问题是当我尝试从服务器加载 xml 时。 我花了好几个小时,尝试了很多不同的实现,但我总是收到异常。 这是我当前的代码:
public void populateDB(){
XmlPullParserFactory pullParserFactory;
ArrayList<Product> products = null;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
InputStream in_s = fContext.getApplicationContext().getAssets().open("products.xml");
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in_s, null);
products = parseXML(parser);
String text = "";
for(Product product:products)
{
text += "barcode : " + product.getBarcode() + " name : " + product.getName() + "\n";
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
clearTable("products");
ContentValues values = new ContentValues();
for(int i = 0; i < products.size(); i++){
values.clear();
values.put("barcode", products.get(i).getBarcode());
values.put("name", products.get(i).getName());
values.put("itemcode", products.get(i).getItemcode());
values.put("description", products.get(i).getDescription());
insertProduct(values);
}
}
这是 parseXML(),我在其中解析文件并生成产品列表。
private ArrayList<Product> parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
{
ArrayList<Product> products = null;
int eventType = parser.getEventType();
Product product = null;
while (eventType != XmlPullParser.END_DOCUMENT){
String name;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
products = new ArrayList();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equals("product")){
product = new Product();
} else if (product != null){
if (name.equals("barcode")){
product.setBarcode(parser.nextText());
} else if (name.equals("name")){
product.setName(parser.nextText());
} else if (name.equals("itemcode")){
product.setItemcode(Integer.parseInt(parser.nextText()));
} else if (name.equals("description")){
product.setDescription(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("product") && product != null){
products.add(product);
}
}
eventType = parser.next();
}
return products;
}
现在这仅适用于本地文件,但如果我想从 url 加载它? 我尝试了this线程中给出的解决方案,以及this,this, this 和 this,但还是不行。
似乎指令parser.setInput(in_s, null); 不接受包含url 的输入流。
xml文件路径如下:http://cendav.altervista.org/gestione_magazzino/products.xml
【问题讨论】:
-
那么潜在的问题是如何从 url 中获取
InputStream? -
不正确,因为我尝试了不同的方法来获取 InputStream,阅读了很多主题,但它从未奏效。所以我不知道问题是InputStream,还是url,还是别的什么。
-
你的问题是如何解析xml?
-
不,我可以解析 xml,但我无法从 url 加载它。
-
什么?你可以解析xml但不能加载url???
标签: java android xml inputstream xmlpullparser