2014-11-20 3 views
0

Я написал программу для получения данных из моего XML-файла в Eclipse, и я напечатал текстовое представление, чтобы убедиться, что попытка работает, но она не передает данные, но я «Я уверен, что у меня есть неправильные параметры, или я неправильно его называю, поэтому любая помощь будет очень признательна.Android Java Passing XML parser

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(); 


    } 
} 

Я знаю, что выше работает печатая на текстовом, но рядом я есть

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); 
} 

И тогда код в нем ничего не делает, так что надеюсь кто-то может указать, если я Правильно ли это передается? В течение второго он просто помещает данные в массив, но если я помещаю вывод текстового представления, прежде чем что-либо делать в нем, это не делает ничего, что заставляет меня думать, что это не передача данных.

Спасибо.

+1

Это помогло бы увидеть код внутри 'ParseXML()'. –

+0

Добавлен код – Navvy

+0

А, нам нужно посмотреть, где вы создаете 'parser'. –

ответ

0

Ищите имена тегов Вы сравнили ссылки, но не строки. Его работы отлично. Так 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); 
} 

надеюсь, что это помогает :) Marcin

+0

Lovely thanks! Сейчас печатаем информацию :) – Navvy