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执行了,
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执行了,
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();
}
}}
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
mp3Info=new Mp3Info();if("resource".equals(tagName)){
mp3Info=new Mp3Info();要像上面这样写
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();
}
}}
一开始没留意这个现象这时候你应该查下文档public InputSource(Reader characterStream)使用字符流创建新的输入源。
应用程序编写者必须使用 setSystemId() 为解析相对 URI 提供基,并且可以使用 setPublicId 将公共标识符包括在内。字符流不能包括字节顺序标记。所以你要etSystemId()这样的话应该就没问题了
可是我的xmlStr是从自己的服务器上下载成功的 并且转化为string类型了
<?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>