2015-05-31 71 views
1

我需要从URL获取一些信息(“http://someurl.com/file.xml”)。 标签中的信息 - “名称”,“姓氏”。从url解析xml。例外

我该怎么做?

我知道我必须使用AsyncTask进行互联网连接。

我试图使用的AsyncTask XMLPullParser,但我得到的例外 “IndeOutOfBound”

class RequestTask extends AsyncTask<String, Void, Void> { 
     String name; 

     @Override 
     protected InputStream doInBackground(String... uri) { 
       try { 
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
        factory.setNamespaceAware(true); 
        XmlPullParser xpp = factory.newPullParser(); 
        xpp.setInput(new InputStreamReader(
          getUrlData("http://someurl.com/file.xml"))); 

        while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { 
         if (xpp.getEventType() == XmlPullParser.START_TAG) { 
          if (xpp.getName().equals("name")) { 
           name=xpp.getAttributeValue(0); 
          } 
         } 
         xpp.next(); 
        } 
       } catch (Throwable t) { 
       } 

} catch (IOException e) { 
     //Handle problems.. 
     } 
     return null; 
     } 

@Override 
protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     Toast.makeText(getActivity().getApplicationContext(), 
     "name="+name, Toast.LENGTH_SHORT).show(); 

     } 

}

+1

嗨 - 你有没有得到解决?我猜你的XML看起来像' Joe Blow'。只是猜测(根据您提供的这些信息)。但是这样的元素没有“属性”,如果你试图调用“xpp.getAttributeValue()”,会导致“indexOutOfBounds”异常。问:你有没有发现问题?问:我的回复中的链接是否有帮助? – paulsm4

+0

你是对的人!非常感谢! – researcher

回答

1

中只看 “file.xml” 的XML。

我怀疑的错误是在这里:

... 
if (xpp.getEventType() == XmlPullParser.START_TAG) { 
    if (xpp.getName().equals("name")) { 
    name=xpp.getAttributeValue(0); // <- Does your"<name>" tag have any attributes??? 

下面是Android上的XML处理一些教程:

尤其要注意使用getText()来获取元素内容。

+0

对,伙计!非常感谢!我很累,很困..你对我的标签是正确的“”没有属性,我需要这个标签的文本) – researcher