1

オンライン XML ファイルから現在の為替レートを読み取り、w3c DOM を介して解析する Android アプリを開発しています。ファイルは 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ましたが、同じ問題に遭遇しました。

4

1 に答える 1

1

AV が私のコードを気に入らなかった理由がわかりました。結局、XML 解析は問題を引き起こさなかったようです...

データをロードするために を使用しましたAsyncTaskが、視覚的なフィードバック ( ProgessDialog) はまだ実装していません。AVアラートはこれだけで十分でした。

于 2013-06-18T09:38:09.010 に答える