Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析XML而不是解析整个文件_Java_Android_Xml - Fatal编程技术网

Java 解析XML而不是解析整个文件

Java 解析XML而不是解析整个文件,java,android,xml,Java,Android,Xml,我有这个XML 以及我的xmlpullparse类: import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; public class XMLPullParserHandler { List<MapLT> mapLTL

我有这个XML

以及我的xmlpullparse类:

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

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class XMLPullParserHandler {
List<MapLT> mapLTList;

private MapLT mapLT;
private String text;

public XMLPullParserHandler() {
    mapLTList = new ArrayList<MapLT>();
}

public List<MapLT> getMapLT(){
    return mapLTList;
}

public List<MapLT> parse(InputStream is){
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;

    try{
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);

        parser = factory.newPullParser();
        parser.setInput(is, null);

        int eventType = parser.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT){
            String tagname = parser.getName();
            switch (eventType){
                case XmlPullParser.START_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLT = new MapLT();
                    }
                    break;
                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;
                case XmlPullParser.END_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLTList.add(mapLT);
                    } else if(tagname.equalsIgnoreCase("Address")){
                        mapLT.setAddress(text);
                    } else if(tagname.equalsIgnoreCase("Latitude")){
                        mapLT.setLatitude(Float.parseFloat(text));
                    } else if(tagname.equalsIgnoreCase("Longitude")){
                        mapLT.setLongitude(Float.parseFloat(text));
                    }
                    break;
                default:
                    break;
            }
            eventType = parser.next();
        }

    }catch (Exception ex){
        ex.printStackTrace();
    }
    return  mapLTList;
}
import java.io.InputStream;
导入java.util.ArrayList;
导入java.util.List;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserFactory;
公共类XMLPullParserHandler{
列表映射列表;
私有MapLT MapLT;
私有字符串文本;
公共XMLPullParserHandler(){
mapLTList=newarraylist();
}
公共列表getMapLT(){
返回mapLTList;
}
公共列表解析(InputStream为){
XmlPullParserFactory工厂=null;
XmlPullParser=null;
试一试{
factory=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser=factory.newPullParser();
setInput(is,null);
int eventType=parser.getEventType();
while(eventType!=XmlPullParser.END_文档){
字符串标记名=parser.getName();
开关(事件类型){
case XmlPullParser.START_标记:
if(标记名.equalsIgnoreCase(“CurrencyExchangePoint”)){
mapLT=新的mapLT();
}
打破
case XmlPullParser.TEXT:
text=parser.getText();
打破
case XmlPullParser.END_标记:
if(标记名.equalsIgnoreCase(“CurrencyExchangePoint”)){
mapLTList.add(mapLT);
}else if(标记名.equalsIgnoreCase(“地址”)){
映射设置地址(文本);
}else if(标记名.equalsIgnoreCase(“纬度”)){
setLatitude(Float.parseFloat(text));
}else if(标记名.equalsIgnoreCase(“经度”)){
setLongitude(Float.parseFloat(text));
}
打破
违约:
打破
}
eventType=parser.next();
}
}捕获(例外情况除外){
例如printStackTrace();
}
返回mapLTList;
}

}

我无法在您的代码中发现问题,因此我的策略是添加日志。
首先打印您得到的所有事件标记和标记名。

问题是6500中一个标记的值为空。。 我花了4个小时

List<MapLT> mapLTs = null;
try {
        XMLPullParserHandler parserHandler = new XMLPullParserHandler();
        mapLTs = parserHandler.parse(getAssets().open("ltlg.xml"));

        for (MapLT item : mapLTs) {
            LatLng lt = new LatLng(item.getLatitude(), item.getLongitude());
            String title = item.getAddress();
            googleMap.addMarker(new MarkerOptions().position(lt).title(title));
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class XMLPullParserHandler {
List<MapLT> mapLTList;

private MapLT mapLT;
private String text;

public XMLPullParserHandler() {
    mapLTList = new ArrayList<MapLT>();
}

public List<MapLT> getMapLT(){
    return mapLTList;
}

public List<MapLT> parse(InputStream is){
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;

    try{
        factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);

        parser = factory.newPullParser();
        parser.setInput(is, null);

        int eventType = parser.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT){
            String tagname = parser.getName();
            switch (eventType){
                case XmlPullParser.START_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLT = new MapLT();
                    }
                    break;
                case XmlPullParser.TEXT:
                    text = parser.getText();
                    break;
                case XmlPullParser.END_TAG:
                    if(tagname.equalsIgnoreCase("CurrencyExchangePoint")){
                        mapLTList.add(mapLT);
                    } else if(tagname.equalsIgnoreCase("Address")){
                        mapLT.setAddress(text);
                    } else if(tagname.equalsIgnoreCase("Latitude")){
                        mapLT.setLatitude(Float.parseFloat(text));
                    } else if(tagname.equalsIgnoreCase("Longitude")){
                        mapLT.setLongitude(Float.parseFloat(text));
                    }
                    break;
                default:
                    break;
            }
            eventType = parser.next();
        }

    }catch (Exception ex){
        ex.printStackTrace();
    }
    return  mapLTList;
}