private List<Mp3Info> parseXml(String xmlStr){
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
List<Mp3Info>infos =new ArrayList<Mp3Info>();
try {
XMLReader xmlReader=saxParserFactory.newSAXParser().getXMLReader();
Mp3ListConnectHandler mp3ListConnectHandler=new Mp3ListConnectHandler(infos);
android.util.Log.i("test1","----------1");
xmlReader.setContentHandler(mp3ListConnectHandler);
android.util.Log.i("test1","----------2");
xmlReader.parse(new InputSource(new StringReader(xmlStr)));//没有执行
android.util.Log.i("test1","----------3");
for (Iterator iterator = infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
android.util.Log.i("test1", "---------4");
System.out.println(mp3Info);
}

catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
最近在看mars的视屏,调用这个函数的时候---------3不打印,就是xmlReader.parse()没有执行 求指教,测试确定parseXml执行了,

解决方案 »

  1.   

    Mp3ListConnectHandler类
    package test.xml;
    import ...;public class Mp3ListConnectHandler extends DefaultHandler{
    private List<Mp3Info> infos=null;
    private Mp3Info mp3Info=null;
    private String tagName=null;
    public Mp3ListConnectHandler(List<Mp3Info> infos) {
    super();
    this.infos = infos;
    } public List<Mp3Info> getInfos() {
    return infos;
    } public void setInfos(List<Mp3Info> infos) {
    this.infos = infos;
    } @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    //super.characters(ch, start, length);
    String temp=new String(ch,start,length);
    if(tagName.equals("id")){
    mp3Info.setId(temp);
    }
    else if(tagName.equals("mp3.name")){
    mp3Info.setMp3Name(temp);
    }
    else if(tagName.equals("mp3.size")){
    mp3Info.setMp3Size(temp);
    }
    else if(tagName.equals("lrc.name")){
    mp3Info.setLrcName(temp);
    }
    else if(tagName.equals("lrc.size")){
    mp3Info.setLrcSize(temp);
    }
    } @Override
    public void endDocument() throws SAXException {
    super.endDocument();
    Log.i("test1", "-----------end");
    } @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    Log.i("test1", "=========");
    if(qName.equals("resource")){
    infos.add(mp3Info);
    Log.i("test1", "----------");
    }
    tagName="";
    } @Override
    public void startDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.startDocument();
    } @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    //super.startElement(uri, localName, qName, attributes);
    this.tagName=localName;
    if(tagName.equals("resource")){
    mp3Info=new Mp3Info();
    }
    }}
      

  2.   

    LogCat错误信息01-10 16:49:54.109: DEBUG/AndroidRuntime(5790): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
    01-10 16:49:54.109: DEBUG/AndroidRuntime(5790): CheckJNI is ON
    01-10 16:49:54.498: DEBUG/AndroidRuntime(5790): --- registering native functions ---
    01-10 16:49:56.168: DEBUG/dalvikvm(198): GC_EXPLICIT freed 133 objects / 7008 bytes in 152ms
    01-10 16:49:56.248: DEBUG/PackageParser(68): Scanning package: /data/app/vmdl62364.tmp
    01-10 16:49:56.438: INFO/PackageManager(68): Removing non-system package:com.test.mp3player
    01-10 16:49:56.438: INFO/ActivityManager(68): Force stopping package com.test.mp3player uid=10041
    01-10 16:49:56.488: INFO/Process(68): Sending signal. PID: 5540 SIG: 9
    01-10 16:49:56.539: INFO/UsageStats(68): Unexpected resume of com.android.launcher while already resumed in com.test.mp3player
    01-10 16:49:56.648: INFO/WindowManager(68): WIN DEATH: Window{4507eae0 com.test.mp3player/com.test.mp3player.MP3playerActivity paused=false}
    01-10 16:49:56.959: WARN/InputManagerService(68): Got RemoteException sending setActive(false) notification to pid 5540 uid 10041
    01-10 16:49:57.718: DEBUG/PackageManager(68): Scanning package com.test.mp3player
    01-10 16:49:57.729: INFO/PackageManager(68): Package com.test.mp3player codePath changed from /data/app/com.test.mp3player-2.apk to /data/app/com.test.mp3player-1.apk; Retaining data and using new
    01-10 16:49:57.760: INFO/PackageManager(68): /data/app/com.test.mp3player-1.apk changed; unpacking
    01-10 16:49:57.800: DEBUG/installd(35): DexInv: --- BEGIN '/data/app/com.test.mp3player-1.apk' ---
    01-10 16:49:58.178: DEBUG/dalvikvm(5799): DexOpt: load 88ms, verify 85ms, opt 4ms
    01-10 16:49:58.213: DEBUG/installd(35): DexInv: --- END '/data/app/com.test.mp3player-1.apk' (success) ---
    01-10 16:49:58.218: WARN/PackageManager(68): Code path for pkg : com.test.mp3player changing from /data/app/com.test.mp3player-2.apk to /data/app/com.test.mp3player-1.apk
    01-10 16:49:58.218: WARN/PackageManager(68): Resource path for pkg : com.test.mp3player changing from /data/app/com.test.mp3player-2.apk to /data/app/com.test.mp3player-1.apk
    01-10 16:49:58.240: INFO/ActivityManager(68): Force stopping package com.test.mp3player uid=10041
    01-10 16:49:58.248: DEBUG/PackageManager(68):   Activities: com.test.mp3player.MP3playerActivity
    01-10 16:49:58.628: INFO/installd(35): move /data/dalvik-cache/data@[email protected]@classes.dex -> /data/dalvik-cache/data@[email protected]@classes.dex
    01-10 16:49:58.628: DEBUG/PackageManager(68): New package installed in /data/app/com.test.mp3player-1.apk
    01-10 16:49:58.998: INFO/ActivityManager(68): Force stopping package com.test.mp3player uid=10041
    01-10 16:49:59.268: DEBUG/dalvikvm(134): GC_EXPLICIT freed 77 objects / 3216 bytes in 249ms
    01-10 16:49:59.378: DEBUG/dalvikvm(68): GC_EXPLICIT freed 11793 objects / 681576 bytes in 317ms
    01-10 16:49:59.978: WARN/RecognitionManagerService(68): no available voice recognition services found
    01-10 16:50:00.388: DEBUG/dalvikvm(176): GC_EXPLICIT freed 1958 objects / 98560 bytes in 831ms
    01-10 16:50:00.718: DEBUG/dalvikvm(68): GC_EXPLICIT freed 4302 objects / 234040 bytes in 249ms
    01-10 16:50:00.728: INFO/installd(35): unlink /data/dalvik-cache/data@[email protected]@classes.dex
    01-10 16:50:00.859: DEBUG/AndroidRuntime(5790): Shutting down VM
    01-10 16:50:00.889: DEBUG/dalvikvm(5790): Debugger has detached; object registry had 1 entries
    01-10 16:50:00.939: INFO/AndroidRuntime(5790): NOTE: attach of thread 'Binder Thread #3' failed
    01-10 16:50:02.158: DEBUG/AndroidRuntime(5807): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
    01-10 16:50:02.169: DEBUG/AndroidRuntime(5807): CheckJNI is ON
    01-10 16:50:02.538: DEBUG/AndroidRuntime(5807): --- registering native functions ---
    01-10 16:50:03.968: INFO/ActivityManager(68): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.test.mp3player/.MP3playerActivity }
    01-10 16:50:04.318: DEBUG/AndroidRuntime(5807): Shutting down VM
    01-10 16:50:04.328: DEBUG/dalvikvm(5807): Debugger has detached; object registry had 1 entries
    01-10 16:50:04.408: INFO/AndroidRuntime(5807): NOTE: attach of thread 'Binder Thread #3' failed
    01-10 16:50:04.459: INFO/ActivityManager(68): Start proc com.test.mp3player for activity com.test.mp3player/.MP3playerActivity: pid=5813 uid=10041 gids={3003}
    01-10 16:50:06.599: INFO/ActivityManager(68): Displayed activity com.test.mp3player/.MP3playerActivity: 2315 ms (total 2315 ms)
    01-10 16:50:11.848: DEBUG/dalvikvm(283): GC_EXPLICIT freed 45 objects / 2112 bytes in 146ms
    01-10 16:50:16.908: DEBUG/dalvikvm(134): GC_EXPLICIT freed 758 objects / 42488 bytes in 182ms
    01-10 16:50:21.928: DEBUG/dalvikvm(198): GC_EXPLICIT freed 153 objects / 11176 bytes in 172ms
    01-10 16:52:50.509: DEBUG/SntpClient(68): request time failed: java.net.SocketException: Address family not supported by protocol
    01-10 16:57:50.519: DEBUG/SntpClient(68): request time failed: java.net.SocketException: Address family not supported by protocol
    01-10 17:02:50.530: DEBUG/SntpClient(68): request time failed: java.net.SocketException: Address family not supported by protocol
      

  3.   

    确定.xml文件没问题 忘高手们指教一下  网上好多类似提问 都没有被解决
      

  4.   

      if(tagName.equals("resource")){
                mp3Info=new Mp3Info();if("resource".equals(tagName)){
                mp3Info=new Mp3Info();要像上面这样写
      

  5.   

    public class Mp3ListConnectHandler extends DefaultHandler{
    private List<Mp3Info> infos=null;
    private Mp3Info mp3Info=null;
    private String tagName=null;
    public Mp3ListConnectHandler(List<Mp3Info> infos) {
    super();
    this.infos = infos;
    } public List<Mp3Info> getInfos() {
    return infos;
    } public void setInfos(List<Mp3Info> infos) {
    this.infos = infos;
    } @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    //super.characters(ch, start, length);
    String temp=new String(ch,start,length);
    // if(tagName.equals("id")){
    // mp3Info.setId(temp);
    // }
    // else if(tagName.equals("mp3.name")){
    // mp3Info.setMp3Name(temp);
    // }
    // else if(tagName.equals("mp3.size")){
    // mp3Info.setMp3Size(temp);
    // }
    // else if(tagName.equals("lrc.name")){
    // mp3Info.setLrcName(temp);
    // }
    // else if(tagName.equals("lrc.size")){
    // mp3Info.setLrcSize(temp);
    // }
    if("id".equals(tagName)){
    mp3Info.setId(temp);
    }
    else if("mp3.name".equals(tagName)){
    mp3Info.setMp3Name(temp);
    }
    else if("mp3.size".equals(tagName)){
    mp3Info.setMp3Size(temp);
    }
    else if("lrc.name".equals(tagName)){
    mp3Info.setLrcName(temp);
    }
    else if("lrc.size".equals(tagName)){
    mp3Info.setLrcSize(temp);
    }
    } @Override
    public void endDocument() throws SAXException {
    super.endDocument();
    Log.i("test1", "-----------end");
    } @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    Log.i("test1", "=========");
    // if(qName.equals("resource")){
    // infos.add(mp3Info);
    // Log.i("test1", "----------");
    // }
    if("resource".equals(qName)){
    infos.add(mp3Info);
    Log.i("test1", "----------endElement");
    }
    tagName="";
    } @Override
    public void startDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.startDocument();
    } @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    //super.startElement(uri, localName, qName, attributes);
    this.tagName=localName;
    // if(tagName.equals("resource")){
    // mp3Info=new Mp3Info();
    // }
    if("resource".equals(tagName)){
    mp3Info=new Mp3Info();
    }
    }}
      

  6.   

     xmlReader.parse(new InputSource(new StringReader(xmlStr)));//没有执行
    一开始没留意这个现象这时候你应该查下文档public InputSource(Reader characterStream)使用字符流创建新的输入源。 
    应用程序编写者必须使用 setSystemId() 为解析相对 URI 提供基,并且可以使用 setPublicId 将公共标识符包括在内。字符流不能包括字节顺序标记。所以你要etSystemId()这样的话应该就没问题了
      

  7.   

    在吗,谢谢你的回复  
          可是我的xmlStr是从自己的服务器上下载成功的  并且转化为string类型了
      

  8.   

    resources.xml
    <?xml version="1.0" encoding="UTF-8">
    <resources>
        <resource>
              <id> 0001</id>
              <mp3.name> a1.mp3</mp3.name>
              <mp3.size> 2774519</mp3.size>
              <lrc.name> a1.lrc</lrc.name>
              <lrc.size> 697</lrc.size>
        </resource>
        <resource>
              <id>0002</id>
              <mp3.name>a2.mp3</mp3.name>
              <mp3.size>27745191</mp3.size>
              <lrc.name>a2.lrc</lrc.name>
              <lrc.size>698</lrc.size>
        </resource>
    </resources>
      

  9.   

    ...不是你的xml有问题,是你的api调用有问题,不能往下执行,就应该查看那个api需要什么条件