0

この小さなxmlファイルをアプリで読み取り、それぞれproductを配列に保存したい:

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>     
        <productname>Jeans</productname>
        <productcolor>red</productcolor>
        <productquantity>5</productquantity>
    </product>
    <product>     
        <productname>Tshirt</productname>
        <productcolor>blue</productcolor>
        <productquantity>3</productquantity>
    </product>
    <product>     
        <productname>shorts</productname>
        <productcolor>green</productcolor>
        <productquantity>4</productquantity>
    </product>
</products>

この関数を使用して Android アプリで xml を解析しますが、最後に製品を取得できず、印刷できません:

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
    {
        ArrayList<product> products = null;
        int eventType = parser.getEventType();
        product currentProduct = null;

        while (eventType != XmlPullParser.END_DOCUMENT){
            String name = null;
            switch (eventType){
                case XmlPullParser.START_DOCUMENT:
                    products = new ArrayList<product>();
                    break;
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    Log.i("MyActivity", name);
                    if (name == "product"){
                        Log.i("MyActivity", "new");
                        currentProduct = new product();
                    } else if (currentProduct != null){
                        if (name == "productname"){
                            currentProduct.name = parser.nextText();
                        } else if (name == "productcolor"){
                            currentProduct.color = parser.nextText();
                        } else if (name == "productquantity"){
                            currentProduct.quantity= parser.nextText();
                        }  
                    }
                    else
                    {
                        Log.i("MyActivity", "old");
                    }
                    break;
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    if (currentProduct != null){
                        products.add(currentProduct);
                    } 
            }
            eventType = parser.next();
        }

    }

logこの関数で気付いたように、いくつかの行を追加するparser.getName()と、タグの名前がname文字列変数に割り当てられていることがわかりましLog.i("MyActivity", name); たが、logcat で名前を確認できますが、logcat では確認できませんLog.i("MyActivity", "new");。つまり、if 句が失敗したことを意味しますが、なぜですか? たとえば、変数name' save theproduct`ですが、それを「product」単語と比較すると失敗し、ログを出力するifステートメントを入力しません。何か見逃しているかどうか、またはここに dataType の競合があるかどうかを知りたいです。

4

1 に答える 1

0

使用する必要がある文字列を使用してください.equals

if(name.equals("product")){

==常に 2 つの参照を比較するだけです(非プリミティブの場合)。つまり、2 つのオペランドが同じオブジェクトを参照しているかどうかをテストします。

ただし、equalsメソッドはオーバーライドできます。そのため、2 つの異なるオブジェクトが等しい可能性があります......

残りはそのまま

 if(name.equals("productname"))  

 else if (name.equals("productcolor"))

 else if (name.equals("productquantity"))
于 2014-09-13T12:03:18.467 に答える