2011-03-03 4 views
0

私はアンドロイドに初心者です。 私は次のように 私のコードがある...私を助けてください、私はそれがテーブルビュー でなければならないことを必要 ...コードおよびDONE XML解析が、そのリストビュー内を検索しました:アンドロイド:xmlはテーブルビューで出力を解析します

class MyXMLHandler 

import org.xml.sax.Attributes; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

public class MyXMLHandler extends DefaultHandler { 

Boolean currentElement = false; 
String currentValue = null; 
public static SitesList sitesList = null; 

public static SitesList getSitesList() { 
    return sitesList; 
} 

public static void setSitesList(SitesList sitesList) { 
    MyXMLHandler.sitesList = sitesList; 
} 

/** Called when tag starts (ex:- <name>AndroidPeople</name> 
* -- <name>)*/ 
@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 

    currentElement = true; 

    if (localName.equals("maintag")) 
    { 
     /** Start */ 
     sitesList = new SitesList(); 
    } else if (localName.equals("website")) { 
     /** Get attribute value */ 
     // String attr = attributes.getValue("category"); 
     // sitesList.setCategory(attr); 
    } 

    } 

    /** Called when tag closing (ex:- <name>AndroidPeople</name> 
* -- </name>)*/ 
    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 

    currentElement = false; 

    /** set value */ 
     if (localName.equalsIgnoreCase("name")) 
      sitesList.setName(currentValue); 
     else if (localName.equalsIgnoreCase("website")) 
      sitesList.setWebsite(currentValue); 

    } 

/** Called to get tag characters (ex:- <name>AndroidPeople</name> 
    * -- to get AndroidPeople Character) */ 
    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 

     if (currentElement) { 
      currentValue = new String(ch, start, length); 
      currentElement = false; 
     } 

    } 

}

第二のクラスSitesList

import java.util.ArrayList; 

/** Contains getter and setter method for variables */ 
public class SitesList { 

    /** Variables */ 
    private ArrayList<String> name = new ArrayList<String>(); 
    private ArrayList<String> website = new ArrayList<String>(); 
    // private ArrayList<String> category = new ArrayList<String>(); 

    /** In Setter method default it will return arraylist 
    * change that to add */ 

    public ArrayList<String> getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name.add(name); 
    } 

    public ArrayList<String> getWebsite() { 
     return website; 
    } 

    public void setWebsite(String website) { 
     this.website.add(website); 
    } 

    /**public ArrayList<String> getCategory() { 
     return category; 
    } 

    public void setCategory(String category) { 
     this.category.add(category); 
    }**/ 

}

および第三級MyParあります

import java.net.URL; 
import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 
import org.xml.sax.InputSource; 
import org.xml.sax.XMLReader; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class XMLParsingExample extends Activity { 

/** Create Object For SiteList Class */ 
SitesList sitesList = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /** Create a new layout to display the view */ 
    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(1); 

    /** Create a new textview array to display the results */ 
    TextView name[]; 
    TextView website[]; 
    //TextView category[]; 

    try { 

     /** Handling XML */ 
     SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
     XMLReader xr = sp.getXMLReader(); 

     /** Send URL to parse XML Tags */ 
     URL sourceUrl = new URL("http://ipaddress/test/file.xml"); 

     /** Create handler to handle XML Tags (extends DefaultHandler) */ 
     MyXMLHandler myXMLHandler = new MyXMLHandler(); 
     xr.setContentHandler(myXMLHandler); 
     xr.parse(new InputSource(sourceUrl.openStream())); 

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

    /** Get result from MyXMLHandler SitlesList Object */ 
    sitesList = MyXMLHandler.sitesList; 

    /** Assign textview array lenght by arraylist size */ 
    name = new TextView[sitesList.getName().size()]; 
    website = new TextView[sitesList.getName().size()]; 
    //category = new TextView[sitesList.getName().size()]; 

    /** Set the result text in textview and add it to layout */ 
    for (int i = 0; i < sitesList.getName().size(); i++) { 
     name[i] = new TextView(this); 
     name[i].setText("Name = "+sitesList.getName().get(i)); 
     website[i] = new TextView(this); 
     website[i].setText("Website = "+sitesList.getWebsite().get(i)); 
     /**category[i] = new TextView(this); 
     category[i].setText("Website Category = "+sitesList.getCategory().get(i));**/ 

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

    /** Set the layout view to display */ 
    setContentView(layout); 

} 

とxmlファイルsingExample私は私はあなたが何をしたいのかを推測することができると思い

<maintag> 
<!-- Table item --> 
<item> 
    <name>sam</name> 
    <website>sam</website> 
</item> 
+0

申し訳ありませんが、私はあなたのポイントを取得しません。質問の最初の段落を編集して詳細を教えてください:1.)あなたは何をしようとしていますか?2.)結果は何ですか3.あなたの質問はあなたの質問に答えるのに役立つでしょう。 – Chris

答えて

1

オーケーUFF Chaaanleeenge受理

です。まず第一に、basiclyあなたのコードは次のようん:

  • があなたのXMLファイルを解析し、すべてのレイアウトのものを作成SitesList
  • に結果を入れprogramaticly
  • それは新しいを生成解析されたすべての項目についてTextView

リストビューはありません。

これで、解析された値をTableViewに配置します。それで、レイアウトを生成するためのコードをどのように構築すれば、Presentation Stuffをコードから離しておくのが最善の方法ではないと私は言います。 Androidはその目的のために非常によく設計されています。あなたは特にレイアウトリソースにhttp://developer.android.com/guide/topics/resources/index.htmlを詳しく見てください。あなたはXMLファイルであなたのレイアウトのものを行うことができます。

しかし、あなたの現在の問題に戻ってください。テーブルにあなたのものを表示するには、あなたのMyParsingExampleの活動を編集する必要があります。

(私は現時点では、コードをテストすることはできませんが、次のようにそれが動作するはずです:)

/** Create a new layout to display the view */ 
LinearLayout layout = new LinearLayout(this); 
layout.setOrientation(1); 

この時点で、あなたは、たとえば、このようなTableLayoutを使用する必要があります。

/** Create a new layout to display the view */ 
TableLayout layout = new TableLayout(this); 

だから、tableLayoutはレイアウトの他のコンポーネントにちょうど別の方法です。

/** Assign textview array lenght by arraylist size */ 
name = new TextView[sitesList.getName().size()]; 
website = new TextView[sitesList.getName().size()]; 
//category = new TextView[sitesList.getName().size()]; 

/** Set the result text in textview and add it to layout */ 
for (int i = 0; i < sitesList.getName().size(); i++) { 
    name[i] = new TextView(this); 
    name[i].setText("Name = "+sitesList.getName().get(i)); 
    website[i] = new TextView(this); 
    website[i].setText("Website = "+sitesList.getWebsite().get(i)); 
    /**category[i] = new TextView(this); 
    category[i].setText("Website Category = "+sitesList.getCategory().get(i));**/ 

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

Textviewsが生成されたポイントのthats:

は今、あなたはこの部分を見てする必要があります。あなたはテーブルビューに行を生成するいくつかのコードでそれを置き換える必要があります。私が言ったように、私は現時点でコードをテストすることはできません。このように例えば

http://developer.android.com/reference/android/widget/TableLayout.htmlhttp://developer.android.com/reference/android/widget/TableRow.html

:しかし、私はにrefferingい

/** Assign textview array lenght by arraylist size */ 
name = new TextView[sitesList.getName().size()]; 
website = new TextView[sitesList.getName().size()]; 
//category = new TextView[sitesList.getName().size()]; 

/** Add rows for every entry and add it to layout */ 
for (int i = 0; i < sitesList.getName().size(); i++) { 
    //we can leave that part as it is 
    name[i] = new TextView(this); 
    name[i].setText("Name = "+sitesList.getName().get(i)); 

    website[i] = new TextView(this); 
    website[i].setText("Website = "+sitesList.getWebsite().get(i)); 

    //now we create a new row 
    TableRow row = new TableRow(this); 

    //we add the textviews to the row 
    row.addView(name[i]); 
    row.addView(website[i]); 

    //and we add the row to the tablelayout 
    layout.addView(row); 
} 

私は本当にそれはあなたがそれに上に行くのに役立ちます願っています。私は一般的にはhttp://developer.android.com/guide/topics/resources/available-resources.htmlを見ておくことをお勧めしますこれはアンドロイドプログラミングを学ぶのに最適なページです。

+0

たくさんのチャンスです。 – Sam

+0

あなたの歓迎です。この回答があなたの問題を解決した場合、それを受け入れるとうまくいくでしょう。どうも – Chris

関連する問題