2016-10-20 5 views
0

Я хочу проанализировать XML-приложение для Android. Я попытался с помощью учебника. Здесь используется DOMParser. В приложении нет ошибок. Но это не показывает вывод XML. Пожалуйста, помогите мне решить проблему. Это то, что я пробовал до сих пор.Выход XML не отображается при разборе XML на Android

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    LinearLayout layout = new LinearLayout(this); 



    TextView name[]; 
    TextView website[]; 
    TextView category[]; 

    try { 

     URL url = new URL(
       "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml"); 

     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource(url.openStream())); 
     doc.getDocumentElement().normalize(); 

     NodeList nodeList = doc.getElementsByTagName("item"); 


     name = new TextView[nodeList.getLength()]; 
     website = new TextView[nodeList.getLength()]; 
     category = new TextView[nodeList.getLength()]; 

     for (int i = 0; i < nodeList.getLength(); i++) { 

      Node node = nodeList.item(i); 

      name[i] = new TextView(this); 
      website[i] = new TextView(this); 
      category[i] = new TextView(this); 

      Element fstElmnt = (Element) node; 
      NodeList nameList = fstElmnt.getElementsByTagName("name"); 
      Element nameElement = (Element) nameList.item(0); 
      nameList = nameElement.getChildNodes(); 
      name[i].setText("Name = " 
        + ((Node) nameList.item(0)).getNodeValue()); 

      NodeList websiteList = fstElmnt.getElementsByTagName("website"); 
      Element websiteElement = (Element) websiteList.item(0); 
      websiteList = websiteElement.getChildNodes(); 
      website[i].setText("Website = " 
        + ((Node) websiteList.item(0)).getNodeValue()); 

      category[i].setText("Website Category = " 
        + websiteElement.getAttribute("category")); 

      layout.addView(name[i]); 
      layout.addView(website[i]); 
      layout.addView(category[i]); 

     } 
    } catch (Exception e) { 
     System.out.println("XML Pasing Excpetion = " + e); 
    } 


    setContentView(layout); 


} 
+0

Что вы видите? –

+0

Только пустое действие – hiranya

+0

Вы определяете разрешение на использование Интернета в AndroidManifest.xml? –

ответ

0

Вы не можете сделать сети или долго выполняющиеся задачи на UI/Main тему, так что вам нужно сделать эту задачу в фоновом потоке с помощью AsyncTask. Попробуйте загрузить xml из url в AsyncTask, а затем загрузите xml в макет в потоке пользовательского интерфейса.

public class XMLParsingDOMExample extends Activity { 

    LinearLayout layout; 
    TextView name[]; 
    TextView website[]; 
    TextView category[]; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     layout = new LinearLayout(this); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     loadXML("http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml"); 
    } 


    private void loadXML(final String stringUrl){ 
     new AsyncTask<Void,Void,Document>(){ 
      @Override 
      protected Document doInBackground(Void... params) { 
       try { 
        URL url = new URL(stringUrl); 
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder db = dbf.newDocumentBuilder(); 
        return db.parse(new InputSource(url.openStream())); 
       }catch (Throwable e){ 
        e.printStackTrace(); 
       } 

       return null; 
      } 

      @Override 
      protected void onPostExecute(Document document) { 
       super.onPostExecute(document); 
       parseXML(document); 
      } 
     }.execute(); 
    } 

    private void parseXML(Document doc){ 

     try { 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("item"); 

      name = new TextView[nodeList.getLength()]; 
      website = new TextView[nodeList.getLength()]; 
      category = new TextView[nodeList.getLength()]; 

      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i); 

       name[i] = new TextView(this); 
       website[i] = new TextView(this); 
       category[i] = new TextView(this); 

       Element fstElmnt = (Element) node; 
       NodeList nameList = fstElmnt.getElementsByTagName("name"); 
       Element nameElement = (Element) nameList.item(0); 
       nameList = nameElement.getChildNodes(); 
       name[i].setText("Name = " 
         + ((Node) nameList.item(0)).getNodeValue()); 

       NodeList websiteList = fstElmnt.getElementsByTagName("website"); 
       Element websiteElement = (Element) websiteList.item(0); 
       websiteList = websiteElement.getChildNodes(); 
       website[i].setText("Website = " 
         + ((Node) websiteList.item(0)).getNodeValue()); 

       category[i].setText("Website Category = " 
         + websiteElement.getAttribute("category")); 

       layout.addView(name[i]); 
       layout.addView(website[i]); 
       layout.addView(category[i]); 
      } 

     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 
     setContentView(layout); 
    } 
} 
+0

Большое спасибо – hiranya

+0

@ hiranya. Если ответ поможет вам решить вашу проблему, тогда вы можете принять и перенести ответ, чтобы он помог другим, у кого такая же проблема. –

+0

Я уже делал это, прежде чем добавлять комментарий. Для меня до сих пор нет хорошей репутации, поэтому она не добавляется. только он записан. Thanx снова – hiranya

Смежные вопросы