项目的结构
首先新建一个book_info.xml的xml文件,结构如下:
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<books>
<catalog>Computer</catalog>
<book>
<country>USA</country>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<price>
10.90
</price>
</book>
<book>
<country>UK</country>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<price>
9.90
</price>
</book>
<book>
<country>USA</country>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<price>
9.90
</price>
</book>
</books>
|
BookItem.java 代表一本书的信息,代码如下:
package
com.example.utility;
public
class
BookItem {
public
String name;
public
String title;
public
String artit;
public
String price;
public
BookItem() {
}
public
String getName() {
return
name;
}
public
void
setName(String countryName)
{
this
.name = countryName;
}
public
String getTitle() {
return
title;
}
public
void
setTitle(String title)
{
this
.title = title;
}
public
String getArtist() {
return
artit;
}
public
void
setArtist(String artit)
{
this
.artit = artit;
}
public
String getPrice() {
return
price;
}
public
void
setPrice(String price)
{
this
.price = price;
}
}
|
BookFeed代表所有书的信息,代码如下:
package
com.example.utility;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
java.util.Vector;
public
class
BookFeed {
private
String catalog;
private
List<BookItem> bookList;
private
int
itemcount;
public
BookFeed()
{
bookList =
new
Vector<BookItem>(
0
);
}
public
int
addBookItem(BookItem item)
{
itemcount++;
bookList.add(item);
return
itemcount;
}
public
BookItem getBookItem(
int
location)
{
return
bookList.get(location);
}
public
List<BookItem> getAllBooks() {
return
bookList;
}
public
String getCatalog() {
return
catalog;
}
public
void
setCatalog(String catalog)
{
this
.catalog = catalog;
}
public
List<BookItem> getBookList() {
return
bookList;
}
public
void
setBookList(List<BookItem> bookList)
{
this
.bookList = bookList;
}
public
List GetAllBooks() {
List<Map<String, String>> data =
new
ArrayList<Map<String,String>>() ;
int
size = bookList.size();
for
(
int
i =
0
; i < size; i++) {
HashMap<String, String> bookItemHashMap =
new
HashMap<String, String>();
bookItemHashMap.put(
"title"
, bookList.get(i).getTitle());
bookItemHashMap.put(
"price"
, bookList.get(i).getPrice());
data.add(bookItemHashMap);
}
return
data;
}
}
|
BookHand.java
package
com.example.utility;
import
org.xml.sax.Attributes;
import
org.xml.sax.SAXException;
import
org.xml.sax.helpers.DefaultHandler;
import
android.R.integer;
public
class
BookHandle
extends
DefaultHandler {
BookFeed bookFeed;
BookItem bookItem;
final
int
Book_Country =
1
;
final
int
Book_Title =
2
;
final
int
Book_Artist =
3
;
final
int
Book_Price =
4
;
int
curState =
0
;
public
BookHandle() {
}
public
BookFeed getBookFeed() {
return
bookFeed;
}
@Override
public
void
startDocument()
throws
SAXException
{
bookFeed =
new
BookFeed();
bookItem =
new
BookItem();
}
@Override
public
void
endDocument()
throws
SAXException
{
}
@Override
public
void
startElement(String uri, String localName, String qName, Attributes attributes)
throws
SAXException {
if
(localName.equals(
"books"
)) {
curState =
0
;
return
;
}
if
(localName.equals(
"book"
)) {
bookItem =
new
BookItem();
return
;
}
if
(localName.equals(
"country"
)) {
curState = Book_Country;
return
;
}
if
(localName.equals(
"title"
)) {
curState = Book_Title;
return
;
}
if
(localName.equals(
"artist"
)) {
curState = Book_Artist;
return
;
}
if
(localName.equals(
"price"
)) {
curState = Book_Price;
return
;
}
curState =
0
;
}
@Override
public
void
endElement(String uri, String localName,String qName)
throws
SAXException
{
if
(localName.equals(
"book"
)) {
bookFeed.addBookItem(bookItem);
return
;
}
}
@Override
public
void
characters(
char
[] ch,
int
start,
int
length)
throws
SAXException {
String str =
new
String(ch,start,length);
switch
(curState) {
case
Book_Country:
bookItem.setName(str);
curState =
0
;
break
;
case
Book_Title:
bookItem.setTitle(str);
curState =
0
;
break
;
case
Book_Artist:
bookItem.setArtist(str);
curState =
0
;
break
;
case
Book_Price:
bookItem.setPrice(str);
curState =
0
;
break
;
default
:
return
;
}
}
}
|
MainActiviyt.java
public
class
MainActivity
extends
Activity {
public
BookFeed feed;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
feed = getFeed();
showList();
}
private
void
showList() {
// TODO Auto-generated method stub
ListView lView = (ListView)
this
.findViewById(R.id.listView1);
if
(feed ==
null
) {
Log.i(
"Custom Message"
,
"feed is null"
);
return
;
}
SimpleAdapter adapter =
new
SimpleAdapter(
this
,
feed.GetAllBooks(),
android.R.layout.simple_list_item_2,
new
String[]{
"title"
,
"price"
},
new
int
[]{android.R.id.text1, android.R.id.text2});
lView.setAdapter(adapter);
}
public
BookFeed getFeed() {
try
{
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
BookHandle handle =
new
BookHandle();
reader.setContentHandler(handle);
InputSource iSource =
new
InputSource(
this
.getClassLoader().getResourceAsStream(
"book_info.xml"
));
reader.parse(iSource);
return
handle.getBookFeed();
}
catch
(ParserConfigurationException e) {
// TODO: handle exception
e.printStackTrace();
}
catch
(SAXException e) {
// TODO: handle exception
e.printStackTrace();
}
catch
(IOException e) {
// TODO: handle exception
e.printStackTrace();
}
return
null
;
}
}
|
效果图:
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/18/2966020.html,如需转载请自行联系原作者