2011-03-03 4 views
0

나는 안드로이드에 초보자입니다. 다음과 같이 내가 검색 한 코드와 완료 XML 파싱하지만이 목록보기에 ... 내가 좀 도와주십시오이있는 tableview 에 있어야한다는 필요는 ... 내 코드는 다음과 같습니다android : 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 허용

입니다. 이 새로운 생성 구문 분석 된

  • 당신의 XML 파일을 구문 분석하고 SitesList 모든 항목에 대해 모든 레이아웃 물건 programaticly
  • 만들기
  • 에 결과를 넣어 : 우선, basicly 코드는 다음을 수행합니다 TextView

거기에 ListView가 없습니다.

이제 파싱 된 값을 TableView에 넣을 수 있습니다. 따라서 내가 말하려는 것은 레이아웃을 생성하기위한 코드를 작성하는 것이 Presentation Stuff를 코드에서 멀리하는 것이 최선의 방법이 아니라는 것입니다. 안드로이드는 그 목적을 위해 매우 잘 설계되었습니다. 특히 레이아웃 리소스에 대해 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가 생성 된 시점 그게 전부 :

이제이 부분을 살펴 있어야합니다. 테이블 뷰에 행을 생성하는 코드로 하위 테이블을 배치해야합니다. 내가 말했듯이 지금은 코드를 테스트 할 수 없습니다.다음과 같은 예를 들어

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

:하지만 난에 참고로하는 것에하고

/** 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