我正在开发一个 Android 应用程序,它从在线 XML 文件中读取当前货币汇率并通过 w3c DOM 对其进行解析。该文件位于我的 AWS S3 存储中。
解析器工作正常,我得到了我想要的所有速率,但我的防病毒应用程序 (avast!) 一直将我的应用程序标记为恶意软件 (Android:Agent-YI[Trj ]).当我注释掉代码并且我使用的方法只返回 true
时,AV 保持安静,因此我将其缩小到下面的代码。
有人知道为什么 AV 不接受我的代码吗?应用程序的唯一权限是:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
解析器代码:
public static boolean fetchCurrencyRates(String in)
{
boolean success = true;
HashMap<String, Double> onlineRates = new HashMap<String, Double>();
try
{
Document xmlRates = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
xmlRates.getDocumentElement().normalize();
NodeList xmlItems = xmlRates.getElementsByTagName("item");
for(int i = 0; i < xmlItems.getLength(); i++)
{
Node n = xmlItems.item(i);
if(n != null && n.getNodeType() == Node.ELEMENT_NODE)
{
Element currency = (Element) n;
String code = currency.getElementsByTagName("title").item(0)
.getTextContent()
.substring(0, 3);
String rate = currency.getElementsByTagName("description").item(0)
.getTextContent()
.split(" ")[3];
Log.i("DEV", code + ": " + rate);
onlineRates.put(code, Double.parseDouble(rate.replaceAll(",", "")));
}
}
}
catch(Exception e)
{
Log.e("DEV", e.getMessage();
success = false;
}
return success && !onlineRates.isEmpty();
}
我还尝试按照 Android 文档的建议使用 XmlPullParser
,但遇到了同样的问题。
最佳答案
我弄清楚了为什么 AV 不喜欢我的代码。显然 XML 解析毕竟没有导致问题......
为了加载数据,我使用了 AsyncTask
并且尚未实现任何视觉反馈 (ProgessDialog
)。对于 AV 警报来说,仅此一项就足够了。
关于java - XML 解析器触发 AV 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16890512/