简体   繁体   English

Android Java传递XML解析器

[英]Android Java Passing XML parser

I've written a program to get data from my XML file in Eclipse, and I've printed to a text view to ensure that the try is working, but it's not passing the data, but I'm unsure as to whether I've got the wrong parameters or I am calling it incorrectly so any help would be greatly appreciated. 我已经编写了一个程序来从Eclipse中的XML文件中获取数据,并且已经打印到文本视图以确保尝试有效,但是它没有传递数据,但是我不确定是否ve输入了错误的参数,或者我打错了它,因此将不胜感激。

public class AnimalList extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_animal_list);

    //pulls data from XML file
    XmlPullParserFactory pullParserFactory;
    try 
    {
        pullParserFactory = XmlPullParserFactory.newInstance();
        XmlPullParser parser = pullParserFactory.newPullParser();

            InputStream in_s = getApplicationContext().getAssets().open("animals.xml");
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in_s, null);

            parseXML(parser);

            TextView display = (TextView)findViewById(R.id.animalInfo);
            display.setText("crap");

    } 
    catch (XmlPullParserException e) 
    {
        e.printStackTrace();


    } 
    catch (IOException e) 
    {
        //Auto-generated catch block
        e.printStackTrace();


    }
}

I know the above is working by printing to a text view but next i have 我知道以上通过打印到文本视图正在工作,但接下来我有

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
{
    ArrayList<Animal> animals = new ArrayList<Animal>();
    int eventType = parser.getEventType();
    Animal currentAnimal = null;


    while (eventType != XmlPullParser.END_DOCUMENT)
    {

        String name = null;
        switch (eventType)
        {
            case XmlPullParser.START_DOCUMENT:
                //animals = new ArrayList();
                break;
            case XmlPullParser.START_TAG:
                name = parser.getName();
                if (name == "animal")
                {
                    currentAnimal = new Animal();
                } 
                else if (currentAnimal != null)
                {
                    if (name == "specificLocation")
                    {
                        currentAnimal.specificLocation = parser.nextText();
                    } 
                    else if (name == "name"){
                        currentAnimal.name = parser.nextText();
                    } 
                    else if (name == "location")
                    {
                        currentAnimal.location= parser.nextText();
                    }  
                    else if (name == "image")
                    {
                        currentAnimal.image= parser.nextText();
                    }  
                    else if (name == "animalInfo")
                    {
                        currentAnimal.animalInfo= parser.nextText();
                    }  
                    else if (name == "todaysFeed")
                    {
                        currentAnimal.todaysFeed= parser.nextText();
                    }  
                }
                break;
            case XmlPullParser.END_TAG:
                name = parser.getName();
                if (name.equalsIgnoreCase("animal") && currentAnimal != null){
                    animals.add(currentAnimal);
                } 
        }
        eventType = parser.next();
    }

    printAnimals(animals);
}

And then the code within it isn't doing anything, so hoping someone can point out if I'm passing it correctly? 然后其中的代码没有执行任何操作,因此希望有人指出我是否正确传递了它? Within the second it's just putting data into an array, but if I put a text view output before I do anything in it, it's not doing anything which makes me think it's not passing data. 在第二个步骤中,它只是将数据放入数组中,但是如果我在执行任何操作之前先放置文本视图输出,则它什么也没做,这使我认为它没有传递数据。

Thanks. 谢谢。

Searching tags names You have compared references, but not strings. 搜索标签名称您已经比较了引用,但没有比较字符串。 Its works fine besides. 此外,它的工作正常。 So parseXML will be like that: 因此parseXML将如下所示:

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
{
    ArrayList<Animal> animals = new ArrayList<Animal>();
    int eventType = parser.getEventType();
    Animal currentAnimal = null;


    while (eventType != XmlPullParser.END_DOCUMENT)
    {

        String name = null;
        switch (eventType)
        {
            case XmlPullParser.START_DOCUMENT:
                //animals = new ArrayList();
                break;
            case XmlPullParser.START_TAG:
                name = parser.getName();
                if (name.equalsIgnoreCase( "animal"))
                {
                    currentAnimal = new Animal();
                } 
                else if (currentAnimal != null)
                {
                    if (name.equalsIgnoreCase( "specificLocation"))
                    {
                        currentAnimal.specificLocation = parser.nextText();
                    } 
                    else if (name .equalsIgnoreCase( "name")){
                        currentAnimal.name = parser.nextText();
                    } 
                    else if (name .equalsIgnoreCase( "location"))
                    {
                        currentAnimal.location= parser.nextText();
                    }  
                    else if (name .equalsIgnoreCase( "image"))
                    {
                        currentAnimal.image= parser.nextText();
                    }  
                    else if (name .equalsIgnoreCase(  "animalInfo"))
                    {
                        currentAnimal.animalInfo= parser.nextText();
                    }  
                    else if (name .equalsIgnoreCase(  "todaysFeed"))
                    {
                        currentAnimal.todaysFeed= parser.nextText();
                    }  
                }
                break;
            case XmlPullParser.END_TAG:
                name = parser.getName();
                if (name.equalsIgnoreCase("animal") && currentAnimal != null){
                    animals.add(currentAnimal);
                } 
        }
        eventType = parser.next();
    }

    printAnimals(animals);
}   

hope it helps :) Marcin 希望对您有所帮助:) Marcin

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM