Ściąganie zagnieżdzonych danych z xml-a do ListView

0

Cześć, mam pewien problem którego nie mogę rozwiązać. Tworzę coś w rodzaju planu zajęć na androida. Dane pobieram z pliku xmla, zamieszczonego na dysku, problem się pojawia, gdy dane w pliku xmla są bardziej zagnieżdzone. np:

<day>
<data1>data1</data1>
<data2>data2/data2>
<position>
<time>18:00-19:30</time>
<data3>data3</data3>
<data4>data4</data4>
<data5>data5</data5>
</position>
<position>
<time>19:30-21:15</time>
<data3>data3</data3>
<data4>data4</data4>
<data5>data5</data5>
</position>
</day>
<day>
<data1>data1</data1>
<data2>data2</data2>
<position>
<time>16:30-21:15</time>
<data3>data3</data3>
<data4>data4</data4>
<data5>data5</data5>
</position>
</day>

W xmlparserze lecę po End_tagu, przeszukując w pliku xml określonych grup, w moim przypadku jest to: data, dzień, godzina, rodzaj, program, uwagi. Jeśli znajduję, dodaję tą wartość do arraylista np UwagiList<String>; przez co mi się tworzy całkowita lista wszystkich "uwag", tylko problem się pojawia wtedy, gdy w przypadku jednego dnia, mamy np. dwie uwagi. W tym momencie już program nie rozróżnia tego, tylko leci dalej. W aplikacji używam własnego adaptera listy, wyświetając dane można powiedzieć jedna pod drugą, wedle każdego dnia.

Kod:

public class ReadXML extends Activity {

    public ArrayList<String> ListaData;
    public ArrayList<String> ListaDzien;
    public ArrayList<String> ListaGodzina;
    public ArrayList<String> ListaRodzaj;
    public ArrayList<String> ListaProgram;
    public ArrayList<String> ListaUwagi;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listviewy);

        AdapterPlanu adapter = new AdapterPlanu();

        ListView listView1 = (ListView) findViewById(R.id.listView1);
        listView1.setAdapter(adapter);
        listView1.setLongClickable(true);




    }


    public class Plan
    {
        String Data;
        String Dzien;
        String Godzina;
        String Rodzaj;
        String Program;
        String Uwagi;
    }


    public class AdapterPlanu extends BaseAdapter{
        List<Plan> planLista = getDataForList();



        @Override
        public int getCount() {
            return planLista.size();
        }

        @Override
        public Object getItem(int position) {
            return planLista.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if(convertView == null){
                LayoutInflater inflater = (LayoutInflater) ReadXML.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.planproby,parent,false);
            }

            TextView DzienDataTextView = (TextView) convertView.findViewById(R.id.dzienDataTextView);
            TextView GodzinaTextView = (TextView) convertView.findViewById(R.id.godzinaTextView);
            TextView RodzajZajecTextView = (TextView) convertView.findViewById(R.id.rodzajzajecTextView);
            TextView ProgramTextView = (TextView) convertView.findViewById(R.id.programTextView);
            TextView UwagiTextView = (TextView) convertView.findViewById(R.id.uwagiTextView);

            Plan plan = planLista.get(position);

            DzienDataTextView.setText(plan.Dzien + " " + plan.Data);
            GodzinaTextView.setText(plan.Godzina);
            RodzajZajecTextView.setText(plan.Rodzaj);
            ProgramTextView.setText(plan.Program);
            UwagiTextView.setText(plan.Uwagi);

            return convertView;
        }
    }


    public List<Plan> getDataForList2(){
        List<Plan> listaPlanu = null;
        Plan currentPlan = null;

        try {
            FileInputStream file = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/" + "planProby.xml");

            XmlPullParserFactory xmlpullparserfactory = XmlPullParserFactory.newInstance();
            XmlPullParser myparser = xmlpullparserfactory.newPullParser();

            myparser.setInput(file, null);

            int event = myparser.getEventType();

            while(event != XmlPullParser.END_DOCUMENT){
                String name = null;
                switch(event){
                    case XmlPullParser.START_DOCUMENT:
                        listaPlanu = new ArrayList<Plan>();
                        break;
                    case XmlPullParser.START_TAG:
                        name = myparser.getName();
                        if(name.equals("proba")){
                            currentPlan = new Plan();
                        }else if(currentPlan != null){

                            if(name.equals("data")) {
                                currentPlan.Data = myparser.nextText();
                            }else if(name.equals("dzien")){
                                currentPlan.Dzien = myparser.nextText();
                            }else if(name.equals("godzina")){
                                currentPlan.Godzina = myparser.nextText();
                            }else if(name.equals("rodzaj")){
                                currentPlan.Rodzaj = myparser.nextText();
                            }else if(name.equals("program")){
                                currentPlan.Program = myparser.nextText();
                            }else if(name.equals("uwagi")){
                                currentPlan.Uwagi = myparser.nextText();
                            }
                        }

                }


            }


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

        return listaPlanu;
    }

    public List<Plan> getDataForList(){
        List<Plan> listaPlanu = new ArrayList<Plan>();
        Plan nowyPlan = null;
        String text = null;

        ListaData = new ArrayList<String>();
        ListaDzien = new ArrayList<String>();
        ListaGodzina= new ArrayList<String>();
        ListaRodzaj= new ArrayList<String>();
        ListaProgram= new ArrayList<String>();
        ListaUwagi= new ArrayList<String>();


        try {
            FileInputStream file = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + "/" + "planProby.xml");

            XmlPullParserFactory xmlpullparserfactory = XmlPullParserFactory.newInstance();
            XmlPullParser myparser = xmlpullparserfactory.newPullParser();

            myparser.setInput(file,null);

            int event = myparser.getEventType();
            while(event != XmlPullParser.END_DOCUMENT){
                nowyPlan = new Plan();
                String name = myparser.getName();


                switch(event) {
                    case XmlPullParser.START_TAG:
                        break;

                    case XmlPullParser.TEXT:
                        text = myparser.getText();
                        break;

                    case XmlPullParser.END_TAG:
                        if (name.equals("data")) {
                            nowyPlan.Data = text;
                            ListaData.add(nowyPlan.Data);

                        } else if (name.equals("dzien")) {
                            nowyPlan.Dzien = text;
                            ListaDzien.add(nowyPlan.Dzien);

                        } else if (name.equals("godzina")) {

                            nowyPlan.Godzina = text;
                            ListaGodzina.add(nowyPlan.Godzina);

                        } else if (name.equals("rodzaj")) {
                            nowyPlan.Rodzaj = text;
                            ListaRodzaj.add(nowyPlan.Rodzaj);

                        } else if (name.equals("program")) {
                            nowyPlan.Program = text;
                            ListaProgram.add(nowyPlan.Program);

                        } else if (name.equals("uwagi")) {
                            nowyPlan.Uwagi = text;
                            ListaUwagi.add(nowyPlan.Uwagi);

                        }



                        break;
                }
   event = myparser.next();

            }


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

       for(int i = 0; i < ListaData.size(); i++){
           nowyPlan = new Plan();

           nowyPlan.Dzien = ListaDzien.get(i);
           nowyPlan.Data = ListaData.get(i);
           nowyPlan.Godzina = ListaGodzina.get(i);
           nowyPlan.Rodzaj = ListaRodzaj.get(i);
           nowyPlan.Program = ListaProgram.get(i);
           nowyPlan.Uwagi = ListaUwagi.get(i);

           listaPlanu.add(nowyPlan);
       }

        Log.d("debug","Size of ListaGodzina is "+ListaGodzina.size() );
        for(int i = 0; i < ListaGodzina.size(); i++){
            Log.d("debug",ListaGodzina.get(i));
        }



        return listaPlanu;
    }


    private List<Plan> parseXML(XmlPullParser parser) throws XmlPullParserException,IOException{

        ArrayList<Plan> plan = null;
        int eventType = parser.getEventType();
        String text = null;
        String test = null;
        String test2 = null;

        Plan currentPlan = new Plan();

        while(eventType != XmlPullParser.END_DOCUMENT){

            String name = parser.getName();

            switch(eventType){

                case XmlPullParser.START_TAG:
                    break;
                case XmlPullParser.TEXT:
                    text = parser.getText();
                    Log.d("debug","text " + text);
                    break;

                case XmlPullParser.END_TAG:
                    if(name.equals("data")){
                        test = text;
                        currentPlan.Data = test;

                        Log.d("debug", "test text data " + test);
                    }else if(name.equals("rodzaj")){
                        test2 = parser.getAttributeValue(null,"value");
                        currentPlan.Rodzaj = test2;
                        Log.d("debug", "test2 rodzaj " + test2);
                    }
                    break;
            }
            eventType = parser.next();


        }
        plan.add(currentPlan);

 return plan;
    }

}
0

Rozumiem, że Node jest odpowiedzią na moje pytanie?

0

Najpierw podziel sobie kod na metody sensownej długości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1