2016-10-20 21 views
0

XMLをAndroidアプリケーションに解析したいとします。私はチュートリアルで試した。ここではDOMParserを使用しています。アプリにエラーはありません。しかし、XML出力は表示されません。問題を解決するのを手伝ってください。これは今まで私が試したことです。あなたがAsyncTaskを使用して、バックグラウンドスレッドでそのタスクを実行する必要があるので、XMLをAndroidに解析するときにXML出力が表示されない

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スレッド上でネットワークまたは長時間実行タスクを実行することはできません。 URLからload xmlをAsyncTaskにして、UIスレッドのレイアウトに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 again – hiranya

関連する問題