xiaosunnihaomang 2011-11-13 17:01
浏览 223
已采纳

3G手机Android应用开发第四天课程2.从网络获取xml格式的视频资讯,我的解析xml出现错误

按照视频中的例子做,出现如下错误:
web项目运行正常,如访问:http://localhost:8088/videoweb/video/list.do
返回的xml为:
<?xml version="1.0" encoding="UTF-8" ?>

  • 喜羊羊与灰太狼全集90
  • 实拍舰载直升东海救援演习20

  • 喀麦隆VS荷兰
    30


    这些短横线不知道是什么东东。
    android项目是想解析这个xml文件,解析器的代码如下:
    public class VideoService {
    public static List getLastVideos() throws Exception{
    String path = "http://192.168.1.100:8088/videoweb/video/list.do";
    URL url = new URL(path);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    conn.setReadTimeout(5*1000);
    conn.setRequestMethod("GET");
    InputStream inStream = conn.getInputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    while((len=inStream.read(buffer))!=-1){
    bos.write(buffer, 0, len);
    }
    return parseXML(inStream);
    }

    private static List parseXML(InputStream inStream) throws Exception{
    List videos = null;
    Video video = null;
    XmlPullParser parser = Xml.newPullParser();
    parser.setInput(inStream, "UTF-8");
    int eventType = parser.getEventType();//产生第一个事件
    while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
    switch (eventType) {
    case XmlPullParser.START_DOCUMENT:
    videos = new ArrayList();
    break;

        case XmlPullParser.START_TAG:
            String name = parser.getName();//获取解析器当前指向的元素的名称
            if("video".equals(name)){
                video = new Video();
                video.setId(new Integer(parser.getAttributeValue(0)));
            }
            if(video!=null){
                if("title".equals(name)){
                    video.setTitle(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
                }
                if("timelength".equals(name)){
                    video.setTime(new Integer(parser.nextText()));
                }
            }
            break;
        case XmlPullParser.END_TAG:
            if("video".equals(parser.getName())){
                videos.add(video);
                video = null;
            }
            break;
        }
        eventType = parser.next();
    }
    return videos;
    

    }

    }
    而activity代码如下:
    public class VideoClientActivity extends Activity {
    private ListView listView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    listView = (ListView)this.findViewById(R.id.listView);
    try {
        List<Video> videos = VideoService.getLastVideos();
        List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();
        for(Video video : videos){
            HashMap<String, Object> item = new HashMap<String, Object>();
            item.put("id", video.getId());
            item.put("title", video.getTitle());
            item.put("timelength", "时长:"+ video.getTime());
            data.add(item);
        }
        Log.i("size", videos.size()+"");
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, 
                new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength});
        listView.setAdapter(adapter);
    } catch (Exception e) {
        Toast.makeText(VideoClientActivity.this, "获取最新视频资讯失败", 1).show();
        Log.e("VideoClientActivity", e.toString());
    } 
    

    }
    }
    在LogCat中添加一个过滤器:VideoClientActivity,出现的错误是:
    [color=red]11-13 08:14:21.303: ERROR/VideoClientActivity(365): org.xmlpull.v1.XmlPullParserException: Premature end of document. (position:line

-1, column -1) caused by: org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found[/color]
请各位大侠解救。 :(

  • 写回答

2条回答 默认 最新

  • 木兰殇 2011-11-14 15:20
    关注

    像<?xml version="1.0" encoding="UTF-8" ?> 这个是版本号和编码格式,xml的编写有一定的格式要求。还有web打开的xml会自动查看你的标签,然后每个小标签出现那种横线。你再仔细看下视频吧,应该介绍得很清楚,不行的话自己多打输出语句,自己调错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog