0

我正在阅读 Head First Android 开发书。在第三章中,他们尝试从此处的 NASA RSS 提要制作应用程序。
在本书中作者SAX parser用于 Java。我在网上查看了一些关于 SO 的答案表明SAX 已经过时并且有更新的解决方案。

但是我不确定Java更容易使用的是什么。我用过NokogiriRuby类似的东西会很棒。我看了看,jsoup它看起来还不错,但我想知道你们可能有什么建议。

4

5 回答 5

1

第 3 章的代码停止了,因为 Android 的主线程不支持网络。

因此,您可以使用任何解析器,例如 XmlPullParser,但请确保您在其主线程之外进行网络连接(下载提要等)。您可以使用 AsyncTask 将网络连接到主线程之外.. 或创建一个新的 Thread() 并在该线程中进行网络连接(推荐)

实际上,在第 4 章中,他们实际上确实创建了一个新线程来进行网络连接。因此,如果您改用第 4 章代码,它将起作用。

您可能面临的另一个问题是 OutOfMemoryError,因为如今美国宇航局的每日图像真的很大。因此,您必须使用 inSampleSize 对图像进行解码。您可以检查有关正确解码图像的其他问题以获得您想要的内容。祝你好运。))

于 2014-07-23T04:11:53.463 回答
1

我是《Head First Android Development》的作者,所以只是想谈谈一些想法。SAX 确实有点麻烦,但很简单,并且内置在 Android 中一段时间​​(因此决定在书中使用它)。我也是一名 Rails 开发人员,我是 nokogiri 的忠实粉丝,并且经常使用它。看着 jsoup,我绝对可以看到它很有用。也就是说,我还没有尝试过,所以我无法提供任何第一手经验。

另一个值得关注的选项是Android 中内置的XML PullParser 。它仍然很像 SAX,但功能更全。

希望这可以帮助。

于 2012-06-18T07:06:52.257 回答
0

我是 Jsoup 的忠实粉丝。我最近才开始使用它,它令人惊叹。我曾经写过一些超级毛茸茸的正则表达式模式来进行模式匹配,因为我想避免像瘟疫一样的 SAX ......你可以想象这非常乏味。Jsoup 让我只需几行代码就可以从 <table> 中解析出特定项目。

假设我想要获取 <tr class=...> 为 GridItem 或 GridAltItem 的表的前 7 行。然后,假设我们要将第一、第二和第三列打印为文本,然后是行中出现的第一个 <a href> 链接。听起来很傻,但我必须这样做,而且我可以很容易地做到这一点:

String page = "... some html markup fetched from somewhere ...";
Document doc = Jsoup.parse(page);
for(int x=0; x< 7; x++) {
  Element gridItem = doc.select("tr[class$=Item]").select("tr").get(x);
  System.out.println("row: " + gridItem.select("td").get(0).text() + " " + gridItem.select("td").get(1).text() + " " + gridItem.select("td").get(4).text() + " " + gridItem.select("a").get(0).attr("href"));
}

使用 Jsoup 就这么简单。确保将 Jsoup jar 文件作为库添加到项目中并导入所需的类:您不想导入错误的 Document 或 Element 类...

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

享受!

于 2012-06-26T02:38:23.300 回答
0

1.6.2 版本开始,Jsoup 官方也支持 XML 解析。因此,这允许您使用类似 jQuery 的 CSS 选择器来解析 XML 和选择元素。要使用 Jsoup 创建 XML 文档,您需要以下方法而不是Jsoup#parse()方法:

Document document = Parser.xmlParser().parseInput(xmlString, "");
// ...

这样输入就不会被隐式地视为 HTML5(因此,没有自动包含的<html><head>标签等)。

于 2012-07-01T04:09:49.830 回答
0

我认为 SAX 是实现它的默认方式,但没有限制尝试新事物:)

于 2012-06-18T06:34:46.247 回答