Разбор XML для arraylist в Android - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь создать список / массив данных для хранения и отправки в качестве входных данных для функции.Но я не в состоянии сделать это, кто-нибудь может мне помочь.Я новичок в разработке Andriod.

MainActivity.java

package com.example.xmlread;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
 import java.util.ArrayList;

   public class MainActivity extends AppCompatActivity {
   TextView tv1;

   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv1=(TextView)findViewById(R.id.textView1);
    XmlPullParserFactory pullParserFactory;


    try {
        pullParserFactory = XmlPullParserFactory.newInstance();
        XmlPullParser parser = pullParserFactory.newPullParser();

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

        parser.setInput(in_s, null);
        ArrayList<FIS> fis=  parseXML(parser);
        String text = "";
        for(FIS fi:fis)
        {

            text+= "Route : "+fi.getDE()+" Distance(KM) : "+fi.getLE()+" 
   Traffic Jam : "+fi.getJF()+"Speed"+fi.getSP()+"\n";
        }
        Log.d("text",text);
        tv1.setText(text);

    } catch (XmlPullParserException e) {

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

 }

   private ArrayList<FIS> parseXML(XmlPullParser parser) throws 
  XmlPullParserException,IOException
   {
    ArrayList<FIS> fis = null;
    int eventType = parser.getEventType();
    FIS fi = null;

    while (eventType != XmlPullParser.END_DOCUMENT){
        String de;
        switch (eventType){
            case XmlPullParser.START_DOCUMENT:
                fis = new ArrayList();
                break;
            case XmlPullParser.START_TAG:
                //de = parser.getDE();
                 if (fi != null){
                    if (fi.equals("DE")){
                        fi.DE = parser.nextText();
                    } else if (fi.equals("LE")){
                        fi.LE = parser.nextText();
                    }
                    else if (fi.equals("JF")){
                        fi.JF = parser.nextText();
                    }
                    else if (fi.equals("SP")){
                        fi.SP = parser.nextText();
                    }

                }
                break;

        }
        eventType = parser.next();
    }

    return fis;

  }

  }

Этот XML-файл также был добавлен в папку ресурсов.Файл MyXML:

<?xml version='1.0' encoding='UTF-8'?>
<TRAFFICML_REALTIME xmlns="http://traffic.nokia.com/trafficml-flow-3.2" 
CREATED_TIMESTAMP="2019-03-19T11:54:51Z" MAP_VERSION="" UNITS="metric" 
VERSION="3.2">
<RWS TY="TMC" MAP_VERSION="201901" EBU_COUNTRY_CODE="5" 
  EXTENDED_COUNTRY_CODE="F2" TABLE_ID="3" UNITS="metric">
    <RW LI="503-00011" DE="100 Feet Main Road" PBT="2019-03-19T11:54:49Z" 
    mid="4e2460ff-07bb-44a1-844a-3f9772b0165b">
        <FIS>
            <FI>
                <TMC PC="14" DE="jnhddggfg" QD="+" LE="0.05949"/>
                <CF CN="0.7" FF="27.0" JF="7.55161" SP="10.0" SU="10.0" 
   TY="TR"/>
            </FI>
            <FI>
                <TMC PC="13" DE="29th Main Road" QD="+" LE="0.77418"/>
                <CF CN="0.7" FF="28.0" JF="7.80008" SP="10.0" SU="10.0" 
     TY="TR"/>
            </FI>
            <FI>
                <TMC PC="12" DE="28th Main Road" QD="+" LE="0.0493"/>
                <CF CN="0.7" FF="26.0" JF="5.61675" SP="13.0" SU="13.0" 
   TY="TR"/>
            </FI>
        </FIS>
    </RW>
 <RW LI="503-00011" DE="100 Feet Main Road" PBT="2019-03-19T11:54:49Z" 
   mid="4e2460ff-07bb-44a1-844a-3f9772b0165b">
        <FIS>
            <FI>
                <TMC PC="14" DE="jnhddggfg" QD="+" LE="0.05949"/>
                <CF CN="0.7" FF="27.0" JF="7.55161" SP="10.0" SU="10.0" 
         TY="TR"/>
            </FI>
            <FI>
                <TMC PC="13" DE="29th Main Road" QD="+" LE="0.77418"/>
                <CF CN="0.7" FF="28.0" JF="7.80008" SP="10.0" SU="10.0" 
                TY="TR"/>
            </FI>
            <FI>
                <TMC PC="12" DE="28th Main Road" QD="+" LE="0.0493"/>
                <CF CN="0.7" FF="26.0" JF="5.61675" SP="13.0" SU="13.0" 
 TY="TR"/>
            </FI>
        </FIS>
    </RW>
    </RWS>
    </TRAFFICML_REALTIME>

Я хочу, чтобы эти данные, хранящиеся в XML, отображались и сохранялись в массиве данных в Android.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2019

Решение:

MainActivity.java

 ArrayList<Fuel> fueldata=  parseXML(parser);
        ArrayList<String> len = null;
                len = new ArrayList();
        ArrayList<String> jf = null;
        jf = new ArrayList();
        ArrayList<String> speed = null;
        speed = new ArrayList();


        String text="";
        for(Fuel mapdata:fueldata)
        {
            len.add(mapdata.getLE());
            jf.add(mapdata.getJF());
            speed.add(mapdata.getSP());

        }

        text = Fuel_Economy(len,jf,speed);
        textView.setText(text);
...