其他响应已经指出,您需要一个列表来存储
ParsedExampleDataSet从XML获取的所有对象。
但是,我想将您的注意力转移到XML处理程序的另一件事上,它可能只会在以后(随机)咬住您。字符方法不是在XML中分配在标记之间找到的值的好地方,因为不能保证字符方法一次返回一个元素中的所有字符。可以在同一元素中多次调用该命令以报告到目前为止找到的字符。通过现在的实现,您最终将丢失数据并想知道发生了什么。
就是说,我将使用a
StringBuilder来积累您的字符,然后在
endElement(...)通话中分配它们。像这样:
public class ExampleHandler extends DefaultHandler{ // =========================================================== // Fields // =========================================================== private StringBuilder mStringBuilder = new StringBuilder(); private ParsedExampleDataSet mParsedExampleDataSet = new ParsedExampleDataSet(); private List<ParsedExampleDataSet> mParsedDataSetList = new ArrayList<ParsedExampleDataSet>(); // =========================================================== // Getter & Setter // =========================================================== public List<ParsedExampleDataSet> getParsedData() { return this.mParsedDataSetList; } // =========================================================== // Methods // =========================================================== @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName.equals("PhonebookEntry")) { this.mParsedExampleDataSet = new ParsedExampleDataSet(); } } @Override public void endElement(String namespaceURI, String localName, String qName)throws SAXException { if (localName.equals("PhonebookEntry")) {this.mParsedDataSetList.add(mParsedExampleDataSet); }else if (localName.equals("firstname")) {mParsedExampleDataSet.setfirstname(mStringBuilder.toString().trim()); }else if (localName.equals("lastname")) { mParsedExampleDataSet.setlastname(mStringBuilder.toString().trim()); }else if(localName.equals("Address")) { mParsedExampleDataSet.setAddress(mStringBuilder.toString().trim()); } mStringBuilder.setLength(0); } @Overridepublic void characters(char ch[], int start, int length) { mStringBuilder.append(ch, start, length);}}然后,您可以在活动中检索ParsedExampleDataSets的列表,并显示在多个文本视图中或仅在一个文本视图中显示。您的
Activity.onCreate(...)方法可能类似于:
@Override public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView tv = new TextView(this); try { URL url = new URL("http://somedomain.com/jm/sampleXML.xml"); URLConnection ucon = url.openConnection(); ExampleHandler myExampleHandler = new ExampleHandler(); //remember to import android.util.Xml Xml.parse(url.openStream(), Xml.Encoding.UTF_8, myExampleHandler); List<ParsedExampleDataSet> parsedExampleDataSetList =myExampleHandler.getParsedData(); for(ParsedExampleDataSet parsedExampleDataSet : parsedExampleDataSetList){ tv.append(parsedExampleDataSet.toString()); } } catch (Exception e) { tv.setText("Error: " + e.getMessage()); } this.setContentView(tv); }


