Lập trình trên Android part 4
Số trang: 6
Loại file: pdf
Dung lượng: 229.83 KB
Lượt xem: 26
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Hãy xem phương thức startElement trong Ví dụ 6. Phương thức này được gọi mỗi khi bắt gặp thẻ mở trong tài liệu XML. Bạn chỉ cần quan tâm khi nào thẻ đó là thẻ ITEM. Trong trường hợp đó, bạn tạo ra một Message mới.
Nội dung trích xuất từ tài liệu:
Lập trình trên Android part 4Ví dụ 6. Trình xử lý SAXimport staticorg.developerworks.android.BaseFeedParser.*;public class RssHandler extends DefaultHandler{ private List messages; private Message currentMessage; private StringBuilder builder; public List getMessages(){ return this.messages; } @Override public void characters(char[] ch, int start, intlength) throws SAXException { super.characters(ch, start, length); builder.append(ch, start, length); } @Override public void endElement(String uri, StringlocalName, String name) throws SAXException { super.endElement(uri, localName, name); if (this.currentMessage != null){ if (localName.equalsIgnoreCase(TITLE)){currentMessage.setTitle(builder.toString()); } else if(localName.equalsIgnoreCase(LINK)){currentMessage.setLink(builder.toString()); } else if(localName.equalsIgnoreCase(DESCRIPTION)){currentMessage.setDescription(builder.toString()); } else if(localName.equalsIgnoreCase(PUB_DATE)){currentMessage.setDate(builder.toString()); } else if(localName.equalsIgnoreCase(ITEM)){ messages.add(currentMessage); } builder.setLength(0); } } @Override public void startDocument() throws SAXException { super.startDocument(); messages = new ArrayList(); builder = new StringBuilder(); } @Override public void startElement(String uri, StringlocalName, String name, Attributes attributes) throws SAXException{ super.startElement(uri, localName, name,attributes); if (localName.equalsIgnoreCase(ITEM)){ this.currentMessage = new Message(); } }}Lớp RssHandler mở rộng lớporg.xml.sax.helpers.DefaultHandler. Lớp này cung cấp các thực thimặc định, không thao tác cho tất cả các phương thức tương tự các sự kiện được tạora bởi trình phân tích SAX. Điều này cho phép các lớp con chỉ ghi chèn lên cácphương thức khi cần thiết. RssHandler có một API bổ sung, getMessages.Cái này trả về danh sách các đối tượng Message mà trình xử lý thu thập được khinó nhận các sự kiện từ trình phân tích SAX. Nó có hai biến trong khác, một làcurrentMessage cho thể hiện Message đang được phân tích, và một là biếnStringBuilder gọi là builder lưu trữ dữ liệu ký tự từ các nút văn bản. Cácbiến này đều được bắt đầu khi phương thức startDocument được dẫn ra khitrình phân tích gửi sự kiện tương ứng cho trình xử lý.Hãy xem phương thức startElement trong Ví dụ 6. Phương thức này được gọimỗi khi bắt gặp thẻ mở trong tài liệu XML. Bạn chỉ cần quan tâm khi nào thẻ đó làthẻ ITEM. Trong trường hợp đó, bạn tạo ra một Message mới. Bây giờ hãy nhìnvào phương thức characters. Phương thức này được gọi ra khi bắt gặp dữ liệuký tự từ các nút văn bản. Dữ liệu dễ dàng được thêm vào biến builder. Cuốicùng hãy xem phương thức endElement. Phương thức này được gọi ra khi bắtgặp thẻ kết thúc. Đối với các thẻ tương ứng với các đặc tính của một Message,giống như TITLE và LINK, đặc tính thích hợp được thiết đặt trêncurrentMessage sử dụng dữ liệu từ biến builder. Nếu thẻ kết thúc là mộtITEM, thì currentMessage thêm vào danh sách Messages. Đây là sự phân tíchSAX rất điển hình; ở đây không có gì là duy nhất đối với Android. Vì thế nếu bạnbiết cách viết một trình phân tích SAX Java, thì bạn biết cách viết một trình phântích SAX Android. Tuy nhiên, Android SDK có bổ sung thêm một số tính năngthuận tiện vào SAX.Phân tích SAX dễ dàng hơnAndroid SDK có chứa một lớp tiện ích được gọi là android.util.Xml. Ví dụ7 trình bày cách cài đặt một trình phân tích SAX với cùng lớp tiện ích như thế.Ví dụ 7. Trình phân tích SAX Androidpublic class AndroidSaxFeedParser extendsBaseFeedParser { public AndroidSaxFeedParser(String feedUrl) { super(feedUrl); } public List parse() { RssHandler handler = new RssHandler(); try { Xml.parse(this.getInputStream(),Xml.Encoding.UTF_8, handler); } catch (Exception e) { throw new RuntimeException(e); } return handler.getMessages(); }}Lưu ý là lớp này vẫn sử dụng trình xử lý SAX chuẩn, vì đơn giản bạn đã sử dụnglại RssHandler như trong Ví dụ 7 ở trên. Việc có thể sử dụng lại trình xử lýSAX rất tốt, nhưng nó vẫn có đôi chút phức tạp về mã trình. Bạn có tưởng tượng,nếu bạn phải phân tích một tài liệu XML phức tạp hơn rất nhiều, trình phân tích cóthể trở thành mảnh đất màu mỡ ...
Nội dung trích xuất từ tài liệu:
Lập trình trên Android part 4Ví dụ 6. Trình xử lý SAXimport staticorg.developerworks.android.BaseFeedParser.*;public class RssHandler extends DefaultHandler{ private List messages; private Message currentMessage; private StringBuilder builder; public List getMessages(){ return this.messages; } @Override public void characters(char[] ch, int start, intlength) throws SAXException { super.characters(ch, start, length); builder.append(ch, start, length); } @Override public void endElement(String uri, StringlocalName, String name) throws SAXException { super.endElement(uri, localName, name); if (this.currentMessage != null){ if (localName.equalsIgnoreCase(TITLE)){currentMessage.setTitle(builder.toString()); } else if(localName.equalsIgnoreCase(LINK)){currentMessage.setLink(builder.toString()); } else if(localName.equalsIgnoreCase(DESCRIPTION)){currentMessage.setDescription(builder.toString()); } else if(localName.equalsIgnoreCase(PUB_DATE)){currentMessage.setDate(builder.toString()); } else if(localName.equalsIgnoreCase(ITEM)){ messages.add(currentMessage); } builder.setLength(0); } } @Override public void startDocument() throws SAXException { super.startDocument(); messages = new ArrayList(); builder = new StringBuilder(); } @Override public void startElement(String uri, StringlocalName, String name, Attributes attributes) throws SAXException{ super.startElement(uri, localName, name,attributes); if (localName.equalsIgnoreCase(ITEM)){ this.currentMessage = new Message(); } }}Lớp RssHandler mở rộng lớporg.xml.sax.helpers.DefaultHandler. Lớp này cung cấp các thực thimặc định, không thao tác cho tất cả các phương thức tương tự các sự kiện được tạora bởi trình phân tích SAX. Điều này cho phép các lớp con chỉ ghi chèn lên cácphương thức khi cần thiết. RssHandler có một API bổ sung, getMessages.Cái này trả về danh sách các đối tượng Message mà trình xử lý thu thập được khinó nhận các sự kiện từ trình phân tích SAX. Nó có hai biến trong khác, một làcurrentMessage cho thể hiện Message đang được phân tích, và một là biếnStringBuilder gọi là builder lưu trữ dữ liệu ký tự từ các nút văn bản. Cácbiến này đều được bắt đầu khi phương thức startDocument được dẫn ra khitrình phân tích gửi sự kiện tương ứng cho trình xử lý.Hãy xem phương thức startElement trong Ví dụ 6. Phương thức này được gọimỗi khi bắt gặp thẻ mở trong tài liệu XML. Bạn chỉ cần quan tâm khi nào thẻ đó làthẻ ITEM. Trong trường hợp đó, bạn tạo ra một Message mới. Bây giờ hãy nhìnvào phương thức characters. Phương thức này được gọi ra khi bắt gặp dữ liệuký tự từ các nút văn bản. Dữ liệu dễ dàng được thêm vào biến builder. Cuốicùng hãy xem phương thức endElement. Phương thức này được gọi ra khi bắtgặp thẻ kết thúc. Đối với các thẻ tương ứng với các đặc tính của một Message,giống như TITLE và LINK, đặc tính thích hợp được thiết đặt trêncurrentMessage sử dụng dữ liệu từ biến builder. Nếu thẻ kết thúc là mộtITEM, thì currentMessage thêm vào danh sách Messages. Đây là sự phân tíchSAX rất điển hình; ở đây không có gì là duy nhất đối với Android. Vì thế nếu bạnbiết cách viết một trình phân tích SAX Java, thì bạn biết cách viết một trình phântích SAX Android. Tuy nhiên, Android SDK có bổ sung thêm một số tính năngthuận tiện vào SAX.Phân tích SAX dễ dàng hơnAndroid SDK có chứa một lớp tiện ích được gọi là android.util.Xml. Ví dụ7 trình bày cách cài đặt một trình phân tích SAX với cùng lớp tiện ích như thế.Ví dụ 7. Trình phân tích SAX Androidpublic class AndroidSaxFeedParser extendsBaseFeedParser { public AndroidSaxFeedParser(String feedUrl) { super(feedUrl); } public List parse() { RssHandler handler = new RssHandler(); try { Xml.parse(this.getInputStream(),Xml.Encoding.UTF_8, handler); } catch (Exception e) { throw new RuntimeException(e); } return handler.getMessages(); }}Lưu ý là lớp này vẫn sử dụng trình xử lý SAX chuẩn, vì đơn giản bạn đã sử dụnglại RssHandler như trong Ví dụ 7 ở trên. Việc có thể sử dụng lại trình xử lýSAX rất tốt, nhưng nó vẫn có đôi chút phức tạp về mã trình. Bạn có tưởng tượng,nếu bạn phải phân tích một tài liệu XML phức tạp hơn rất nhiều, trình phân tích cóthể trở thành mảnh đất màu mỡ ...
Tìm kiếm theo từ khóa liên quan:
Lập trình android tài liệu lập trình android thủ thuật lập trình mẹo trong lập trình tài liệu về lập trìnhGợi ý tài liệu liên quan:
-
Thủ thuật giúp giải phóng dung lượng ổ cứng
4 trang 217 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 208 0 0 -
Hướng dẫn lập trình với Android part 4
5 trang 156 0 0 -
142 trang 130 0 0
-
150 trang 104 0 0
-
78 trang 103 0 0
-
Giáo trình Lập trình Android trong ứng dụng điều khiển: Phần 2
98 trang 90 0 0 -
7 trang 85 0 0
-
Giáo trình Lập trình Android: Phần 2 - Lê Hoàng Sơn (Chủ biên)
60 trang 79 0 0 -
8 trang 78 0 0
-
Bài giảng Lập trình Android: Làm quen với Android - ThS.Bùi Trung Úy
42 trang 53 0 0 -
Ngân hàng đề thi học phần Nhập môn tin học - Nhập môn lập trình
18 trang 44 0 0 -
Ngân hàng câu hỏi trắc nghiệm về lập trình web ASP.Net (C#)
11 trang 44 0 0 -
The CISA Prep Guide Mastering the Certified Information Systems Auditor Exam phần 1
60 trang 43 0 0 -
Bài giảng Lập trình Android: Lưu trữ dữ liệu - ThS.Bùi Trung Úy
31 trang 42 0 0 -
Những công cụ chỉnh sửa video trực tuyến
4 trang 41 0 0 -
All My Apps - Cập nhật thầm lặng mọi ứng dụng trên PC
3 trang 38 0 0 -
83 trang 35 0 0
-
29 trang 35 0 0
-
71 trang 34 0 0