- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 android 应用程序,我将在其中大量使用 SAX。我想知道将处理程序的“数据”或结果发送回我的 Activity 的最佳方式是什么?
IMO 在我的处理程序中调用 intents 或创建 toasts 等有点麻烦,我更愿意从我的 Activity 中做这些事情,这取决于我的处理程序中发生的事情。
大家怎么看?我应该如何以干净的方式执行此操作?
这是一个代码示例:
public void startElement(String n, String l, String q, Attributes a) throws SAXException{
if(l == "login") in_loginTag = true;
if(l == "error") {
if(Integer.parseInt(a.getValue("value")) == 1)
Toast.makeText(getApplicationContext(), "Couldn't connect to Database", Toast.LENGTH_SHORT).show();
if(Integer.parseInt(a.getValue("value")) == 2)
Toast.makeText(getApplicationContext(), "Error in Database: Table missing", Toast.LENGTH_SHORT).show();
if(Integer.parseInt(a.getValue("value")) == 3)
Toast.makeText(getApplicationContext(), "Invalid username and/or password", Toast.LENGTH_SHORT).show();
error_occured = true;
}
我不希望从我的处理程序类中显示这些 Toast。
最佳答案
我在我当前的应用程序中做了很多 XML 解析,这是 this example帮助很大。
在设计方面,我相信您应该使用自定义 SAX 处理程序,而不是 toast 或意向广播等,它将在开始的 XML 元素处实例化一个 Parse 对象。该对象代表您的 XML 项。因此,对象可能是汽车,并且有门、颜色、车轮的 setter/getter。当您在 SAX 解析器中解析数据时,您将设置这些值。当 SAX 解析器完成解析时,您调用解析器让它将对象传回您的 Activity ,该 Activity 充满了来自您的 XML 的所有汽车。在我的例子中,我实际上填充了一个传回的对象列表/数组。该示例仅处理一组数据。无论如何,该链接说明了一切。
编辑:只是查看我的代码,实际上我在我的处理程序中所做的是构建我的 ParsedData 集对象的数组,这些对象在解析完成后通过 getParsedData() 传递回 Activity 。下面是一些重要的代码:
XML 处理程序:
private boolean in_IdSite;
private boolean in_SiteName;
private ArrayList<ParsedChannelDataSet> list = new ArrayList<ParsedChannelDataSet>();
public ArrayList<ParsedChannelDataSet> getParsedData() {
return this.list;
}
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
// first tag parsed so add a new ParsedEventDataSet object
if(localName.equals("stmSiteUser")) {
list.add(new ParsedChannelDataSet());
} else if (localName.equals("idSite")) {
this.in_IdSite = true;
} else if (localName.equals("siteName")) {
this.in_SiteName = true;
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
if (localName.equals("idSite")) {
this.in_IdSite = false;
} else if (localName.equals("siteName")) {
this.in_SiteName = false;
}
}
@Override
public void characters(char ch[], int start, int length) {
// determine if any tag is current, get data from tag and populate into ParsedEventDataSet
if (this.in_IdSite) {
this.list.get(this.list.size()-1).setExtractedIdSite(new String(ch, start, length));
} else if (this.in_SiteName) {
this.list.get(this.list.size()-1).setExtractedSiteName(new String(ch, start, length));
}
}
这是我的示例 ParsedDataSampleSet(可以随意调用)显然您也想用其他东西替换 siteName 和 idSite。这些只是我的 XML 元素
public class ParsedChannelDataSet {
private String extractedIdSite = null;
private String extractedSiteName = null;
public String getExtractedIdSite() {
return extractedIdSite;
}
public void setExtractedIdSite(String _extractedIdSite) {
this.extractedIdSite = _extractedIdSite;
}
public String getExtractedSiteName() {
return extractedSiteName;
}
public void setExtractedSiteName(String _extractedSiteName) {
Log.d("", _extractedSiteName);
this.extractedSiteName = _extractedSiteName;
}
public String toString() {
/* TODO */
return "todo";
}
}
所以你可以看到我构建了一个 ParsedChannelDataSet 对象数组,这些对象被传递回 Activity 。这是一个比使用 toast 或广播更好的解决方案,因为它是一个更解耦的解决方案
编辑 2:我链接的网站第 2 页上的第一篇文章提到了像我这样解析多个 XML 元素。请参阅此处 ( parse multiple xml elements )。
希望对你有帮助
关于Android:将数据从 DefaultHandler 类传递到 Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708915/
这个问题在这里已经有了答案: Specs: What's the purpose of the blank identifier in variable assignment? [duplicate
我正在玩 Android 和 RSS,在 XML 解析器部分,我们有 DefaultHandler 及其方法: public void startElement(String uri, String
我刚刚读到characters(char[] ch, int start, int length)可以针对一个内部 XML 数据多次调用(例如 John Smith )。 在我的项目中,我必须解析大型
有没有办法在 SAXParser 或 XMLReader 上调用 quit() 函数? XML 文档大约每天更新一次,我只希望在元素发生变化时读取完整文档。 在我的默认处理程序中: @Override
我创建了一个扩展 SAX DefaultHandler 的类。为了获取标签之间的值,我这样做: private static class MyHandler extends DefaultHandle
我正在尝试解析和检测标签中 CDATA 的开始,例如: 我有一个扩展默认处理程序的类 class MyXmlDoc extends DefaultHandler{ 使用 startElement()
我正在开发一个 android 应用程序,我将在其中大量使用 SAX。我想知道将处理程序的“数据”或结果发送回我的 Activity 的最佳方式是什么? IMO 在我的处理程序中调用 intents
我遇到的问题是我想使用 SAX defaultHandler 类的扩展来解析 1 个 XML 文档。当只使用一个处理程序时,我可以解析出 XML 并将不同的标签分配给对象的属性(请参阅域和区域)。一旦
我正在开发一个 RSS 阅读器。运行此代码时,localName 和 uri 为空。我正在解析 RSS 提要。我正在运行以下代码。相同的代码在另一个 android 项目中运行良好。 @Overrid
我制作了一个 sax 解析器,其主类具有 main 方法,并使用 XMLReader.setContentHandler(myCustomParserClass) 设置解析器,这是一个扩展 Defau
我正在使用DefaultHandler 解析基于XML 的InputStream。它工作正常,但有一个异常(exception)。所有字符都转换为小写。例如,如果我的 xml 有一个像 VALUE 这
我有以下适用于我的主要 Activity 的代码,但我有一个扩展的 DefaultHandler 类并希望能够访问一些资源。 如何让以下内容起作用? Drawable newMarker = this
在消息处理程序中调用 DefaultHandler(Message) 和 inherited 之间到底有什么区别。例如: TScrollBox = class(TScrollingWinControl
我正在扩展 DefaultHandler 来解析 xml。我正在解析这个页面: http://maps.googleapis.com/maps/api/directions/xml?origin=st
我在尝试从基本 JAX-RS 设置中获取 JSON 输出时遇到一个停止显示的错误。我正在尝试生成此默认“服务”代码的 Netbeans 的 Web 服务向导: package service; imp
我正在使用带有 jpgraph 的数据库处理带有满意度表单的图表,我遇到了一些与处理程序错误相关的问题。 这是我的程序: getMessage()); } //var $req
我是一名优秀的程序员,十分优秀!