在Android中解析XML到arraylist
我试图创建一个要存储的数据列表/数组,并将其作为输入发送到函数。但是我做不到,有人能帮我吗。 我是安德里奥德开发公司的新手 MainActivity.java在Android中解析XML到arraylist,android,xml-parsing,here-api,Android,Xml Parsing,Here Api,我试图创建一个要存储的数据列表/数组,并将其作为输入发送到函数。但是我做不到,有人能帮我吗。 我是安德里奥德开发公司的新手 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 o
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;
}
}
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);
package com.example.xmlread;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.TextView;
导入android.util.Log;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException;
导入org.xmlpull.v1.XmlPullParserFactory;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
文本视图tv1;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
XmlPullParserFactory pullParserFactory;
试一试{
pullParserFactory=XmlPullParserFactory.newInstance();
XmlPullParser=pullParserFactory.newPullParser();
InputStream in_s=
getApplicationContext().getAssets().open(“demo.xml”);
setFeature(XmlPullParser.FEATURE_进程_名称空间,false);
setInput(in_s,null);
ArrayList fis=parseXML(解析器);
字符串文本=”;
对于(金融机构金融机构:金融机构)
{
text++“路线:+fi.getDE()+”距离(公里):“+fi.getLE()+”
交通堵塞:“+fi.getJF()+”速度“+fi.getSP()+”\n”;
}
Log.d(“文本”,文本);
tv1.setText(文本);
}catch(XMLPullParseRexE){
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
私有ArrayList parseXML(XmlPullParser)抛出
XmlPullParserException,IOException
{
ArrayList fis=null;
int eventType=parser.getEventType();
FIS-fi=null;
while(eventType!=XmlPullParser.END_文档){
字符串de;
开关(事件类型){
案例XmlPullParser.START_文档:
fis=新的ArrayList();
打破
case XmlPullParser.START_标记:
//de=parser.getDE();
如果(fi!=null){
如果(fi.等于(“DE”)){
fi.DE=parser.nextText();
}如果(fi.等于(“LE”)){
fi.LE=parser.nextText();
}
如果(fi.等于(“JF”)){
fi.JF=parser.nextText();
}
如果(fi等于(“SP”)){
fi.SP=parser.nextText();
}
}
打破
}
eventType=parser.next();
}
返回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中显示并存储到arraylist中
提前感谢。解决方案是:
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;
}
}
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);
ArrayList-fueldata=parseXML(解析器);
ArrayList len=null;
len=新的ArrayList();
ArrayList jf=null;
jf=新的ArrayList();
ArrayList速度=零;
速度=新的ArrayList();
字符串文本=”;
用于(燃料地图数据:燃料数据)
{
add(mapdata.getLE());
add(mapdata.getJF());
add(mapdata.getSP());
}
text=燃油经济性(len、jf、速度);
textView.setText(text);
解决方案是:
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;
}
}
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);
ArrayList-fueldata=parseXML(解析器);
ArrayList len=null;
len=新的ArrayList();
ArrayList jf=null;
jf=新的ArrayList();
ArrayList速度=零;
速度=新的ArrayList();
字符串文本=”;
用于(燃料地图数据:燃料数据)
{
add(mapdata.getLE());
add(mapdata.getJF());
add(mapdata.getSP());
}
text=燃油经济性(len、jf、速度);
textView.setText(text);
您选择使用xmlpull库是否有特定的原因?我对这个库不太了解,但是您是如何为这个xml结构创建模型的(也许库会自动为您创建模型的)?首先,您的FIS数据类是RW的子类。也就是说,为什么要创建FIS的ArrayList?@rj2700我可以自己修复它您选择使用xmlpull库有什么特别的原因吗?我对这个库不太了解,但是您是如何为这个xml结构创建模型的(也许库会自动为您创建模型的)?首先,您的FIS数据类是RW的子类。也就是说,你为什么要创建FIS的ArrayList?@rj2700我可以自己修复它