gpt4 book ai didi

java - Android:如何从 RSS feed 获取值并从另一个 RSS feed 中的值减去它

转载 作者:行者123 更新时间:2023-12-01 12:38:00 28 4
gpt4 key购买 nike

嘿,我有这两个 RSS 源 - http://www.petrolprices.com/feeds/averages.xml?search_type=town&search_value=kilmarnockhttp://www.petrolprices.com/feeds/averages.xml?search_type=town&search_value=glasgow 。现在我想做的是从一个 RSS 提要中获取一个值,并使用另一个 RSS 提要中的值来计算它。例如

132.9 - 133.1

我该怎么做?

基本思想是,用户创建 RSS URL,然后 onClick 获取每个 RSS 提要中的所有值,并将其与其他提要进行比较,以便用户获得差异,这样通过选择一个或多个 RSS 提要即可节省总体资金另一个

最佳答案

据我了解,您的问题有一个简单的答案,以及一个更具体有用的答案。我将首先记录如何将字符数据转换为数字(无论是 int、double、float 等)的简单答案,特别关注异常情况,然后深入研究专门适用于您的情况的细节。问题。

只要你有一个你认为是某种数字类型的字符串表示形式,你就可以为目标包装类调用适当的 valueOf() 或 parseXYZ() 方法。例如。如果您正在寻找整数:theInt 是字符串“42”。 Integer.valueOf(theInt) 将返回一个值为 42 的 Integer,而 Integer.parseInt(theInt) 将返回 int 42。 http://developer.android.com/reference/java/lang/Double.html

如果 theInt 表示“42”或“42.0”,则任一方法都会抛出 NumberFormatException。解析 float 的过程大致相同,只是“42.0”会正确解析,而“42.0.0”会在 Android 上抛出 NumberFormatException。传递给这些方法之一的整个字符串必须是所选类型的有效数字。末尾的空格也会引发异常。

如果您使用的是扫描仪,则可以使用 hasNextXYZ() 和 nextXYZ() 来检查并获取下一个数字,其中 XYZ 可以是任何基本类型。扫描程序将处理下一个标记,该标记将根据您设置的分隔符进行定义。 http://developer.android.com/reference/java/util/Scanner.html

“太好了,那么应该在何时、何地以及如何获取 XML 中的数字并将它们传递给上述任一方法?” 您应该有一个数据结构来保存每个值,您在解析 XML 时填充它。基于 your related question, 的情况据我了解,将 XML 解析为标记的问题已经解决。因此,请更新解析器以针对最高、平均和最低元素的值调用正确的字符串到数字转换方法。您需要的字符串已经正确修剪并在每个阶段通过解析器。

或者,为了进一步解耦代码,创建一个对象来保存要比较的数据集,然后让解析器简单地实例化并调用 setter 。 FuelData 可能就是那个对象。

class FuelData { 
String KEY_TYPE;
double highest;
double average;
double lowest;
// if future support for currency types needed, would go here, hook in to units attribute in xml
FuelData(String type) { // call this every time a type is encountered parsing html
KEY_TYPE = type;
}

void setHighest(String val) { // here, val is value of "Highest" element
try {
highest = Double.parseDouble(val); // because you're not using a Scanner to parse
} catch (NumberFormatException e) {
// handle appropriately
}
// perhaps sanity check: disallow negatives, check not less than lowest, etc.
}

// and so on for average and lowest

double computeSavings(FuelData pricesB) { // called by onClick
// your subtraction goes here. Perhaps you decide it's reasonable to use this method
// to compute savings for Regular vs. Premium and therefore do not check type,
// perhaps you decide that's illogical and do check types.
// Note: good arguments can be made that this method should exist in a different
// class. I've placed it here for simplicity's sake.
}
}

以逻辑方式收集FuelData,解析完成后即可访问,例如feed1被解析为一组FuelData,feed2被解析为一组FuelData等,然后让onClick获取所有解析后的FuelData从每个 RSS 提要中,通过computeSavings 进行比较,并返回结果。

关于java - Android:如何从 RSS feed 获取值并从另一个 RSS feed 中的值减去它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391038/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com