2010-11-29 6 views
2

Rien n'est écrit dans l'écran TextView.extraction d'informations à partir de xml mais pas d'affichage

Je ne suis pas sûr de ce que je fais mal ici, mais ceci est mon code suivant:

<?xml version="1.0"?> 
<news> 
    <article title="TITLE HERE" link="*.php?showtopic=118" date="DATE HERE"></article> 
</news> 

JAVA CODE:

try { 
    //open an URL connection make GET to the server and 
    URL url = new URL("http://.../m_news.xml"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    InputStream is = conn.getInputStream(); 

    //DocumentBuilderFactory, DocumentBuilder are used for 
    //xml parsing 
    DocumentBuilderFactory dbf = DocumentBuilderFactory 
     .newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 

    //using db (Document Builder) parse xml data and assign 
    //it to Element 
    Document document = db.parse(is); 
    Element element = document.getDocumentElement(); 

    NodeList nodeList = element.getElementsByTagName("news"); 
    NodeList nodeList2 = element.getElementsByTagName("article"); 

     if (nodeList.getLength() > 0) { 
      for (int i = 0; i < nodeList2.getLength(); i++) { 
       Element entry = (Element) nodeList.item(0); 

       Element _rowE = (Element) entry.getElementsByTagName("article").item(i); 
       Node _rowTITLE = _rowE.getAttributes().getNamedItem("title"); 
       Node _rowLINK = _rowE.getAttributes().getNamedItem("link"); 

       TextView textview = new TextView(this); 
       textview.setMovementMethod(LinkMovementMethod.getInstance()); 
       String text = "<a href='"+_rowLINK.getNodeValue()+"'>"+_rowTITLE.getNodeValue()+"</a>"; 
       textview.setText(Html.fromHtml(text)); 
       setContentView(textview); 
      } 
     }  
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Avez-vous essayé la mise juste le texte, au lieu de html.fromHtml? – blindstuff

+0

Si vous faites tout cela dans le fil de l'interface utilisateur, c'est vraiment mauvais ... – Falmarri

+1

nice pokemon try/catch :) – ocodo

Répondre

1

Vous instanciation TextView s et appelant setContentView() à chaque d'entre eux ... ça ne marchera jamais. À tout le moins, vous devez donner des instructions de mise en page (appelez setLayoutParams sur chaque TextView) mais je ne suis même pas sûr que cela fonctionnera sans une sorte d'objet conteneur.

Essayez ceci. Créer une mise en page simple appelé news.xml qui a ceci:

<LinearLayout 
    android:id="@+id/newsItems" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
/> 

Changez ensuite votre code sont les suivantes:

setContentView(R.layout.news); 
LinearLayout linearLayout = (LinearLayout)findViewById(R.id.newsItems); 
... 
for (int i = 0; i < nodeList2.getLength(); i++) { 
    ... 
    TextView textview = new TextView(this); 
    textview.setLayoutParams(new LinearLayout.LayoutParams(FILL_PARENT, WRAP_CONTENT)); 
    ... 
    textview.setText(Html.fromHtml(text)); 
    linearLayout.addView(textview); 
} 
Questions connexes