private List<Mp3Info> parseXML(String xmlStr){
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
List<Mp3Info> infos = new ArrayList<Mp3Info>();
try{
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
Mp3ContentHandler mp3ListContentHandler = new Mp3ContentHandler(infos);
xmlReader.setContentHandler(mp3ListContentHandler);
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
for (Iterator<Mp3Info> iterator = infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
System.out.println(mp3Info);
}
}
catch(Exception e){
e.printStackTrace();
}
return infos;
}
这个方法是对下载的xml文件的简析但是这句xmlReader.parse(new InputSource(new StringReader(xmlStr)));执行不了
String xml = downloadXML("http://192.168.136.125:8080/mp3/resouces.xml");
System.out.println(xml);
parseXML(xml);这段代码是调用上面的方法
System.out.println(xml);
这个可以输出得到的xml文本
xmlReader.parse(new InputSource(new StringReader(xmlStr)));就这句执行了不了 也没有报错 是不是我哪里少了东西了
高手指教
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
List<Mp3Info> infos = new ArrayList<Mp3Info>();
try{
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
Mp3ContentHandler mp3ListContentHandler = new Mp3ContentHandler(infos);
xmlReader.setContentHandler(mp3ListContentHandler);
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
for (Iterator<Mp3Info> iterator = infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
System.out.println(mp3Info);
}
}
catch(Exception e){
e.printStackTrace();
}
return infos;
}
这个方法是对下载的xml文件的简析但是这句xmlReader.parse(new InputSource(new StringReader(xmlStr)));执行不了
String xml = downloadXML("http://192.168.136.125:8080/mp3/resouces.xml");
System.out.println(xml);
parseXML(xml);这段代码是调用上面的方法
System.out.println(xml);
这个可以输出得到的xml文本
xmlReader.parse(new InputSource(new StringReader(xmlStr)));就这句执行了不了 也没有报错 是不是我哪里少了东西了
高手指教
这样呢?
你还是确认下你的hander有没有问题吧,或者把错误的LOGCAT信息贴上来
xmlReader.parse(new InputSource(new StringReader(xmlStr)));意思是这句(包括这句)以后的代码都不执行了
这是全部的logcat 根本就没有error
09-29 03:55:19.564: DEBUG/AndroidRuntime(244): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
09-29 03:55:19.592: DEBUG/AndroidRuntime(244): CheckJNI is ON
09-29 03:55:21.620: DEBUG/AndroidRuntime(244): --- registering native functions ---
09-29 03:55:21.770: INFO/jdwp(244): received file descriptor 18 from ADB
09-29 03:55:22.608: DEBUG/ddm-heap(244): Got feature list request
09-29 03:55:24.331: DEBUG/AndroidRuntime(244): Shutting down VM
09-29 03:55:24.351: DEBUG/dalvikvm(244): DestroyJavaVM waiting for non-daemon threads to exit
09-29 03:55:24.361: DEBUG/dalvikvm(244): DestroyJavaVM shutting VM down
09-29 03:55:24.361: DEBUG/dalvikvm(244): HeapWorker thread shutting down
09-29 03:55:24.361: DEBUG/dalvikvm(244): HeapWorker thread has shut down
09-29 03:55:24.370: DEBUG/jdwp(244): JDWP shutting down net...
09-29 03:55:24.392: DEBUG/jdwp(244): +++ peer disconnected
09-29 03:55:24.392: INFO/dalvikvm(244): Debugger has detached; object registry had 1 entries
09-29 03:55:24.420: DEBUG/dalvikvm(244): VM cleaning up
09-29 03:55:24.461: DEBUG/dalvikvm(244): LinearAlloc 0x0 used 665652 of 4194304 (15%)
09-29 03:55:25.280: DEBUG/AndroidRuntime(254): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
09-29 03:55:25.280: DEBUG/AndroidRuntime(254): CheckJNI is ON
09-29 03:55:25.660: DEBUG/AndroidRuntime(254): --- registering native functions ---
09-29 03:55:25.671: INFO/jdwp(254): received file descriptor 18 from ADB
09-29 03:55:26.141: DEBUG/ddm-heap(254): Got feature list request
09-29 03:55:27.150: INFO/ActivityManager(53): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.bekeer.mp3player/.Mp3ListActivity }
09-29 03:55:27.162: DEBUG/AndroidRuntime(254): Shutting down VM
09-29 03:55:27.162: DEBUG/dalvikvm(254): DestroyJavaVM waiting for non-daemon threads to exit
09-29 03:55:27.181: DEBUG/dalvikvm(254): DestroyJavaVM shutting VM down
09-29 03:55:27.181: DEBUG/dalvikvm(254): HeapWorker thread shutting down
09-29 03:55:27.181: DEBUG/dalvikvm(254): HeapWorker thread has shut down
09-29 03:55:27.191: DEBUG/jdwp(254): JDWP shutting down net...
09-29 03:55:27.191: DEBUG/jdwp(254): +++ peer disconnected
09-29 03:55:27.191: INFO/dalvikvm(254): Debugger has detached; object registry had 1 entries
09-29 03:55:27.211: DEBUG/dalvikvm(254): VM cleaning up
09-29 03:55:27.270: DEBUG/dalvikvm(254): LinearAlloc 0x0 used 676828 of 4194304 (16%)
09-29 03:56:09.152: INFO/global(207): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
09-29 03:56:09.311: WARN/System.err(207): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 117: mismatched tag
09-29 03:56:09.344: WARN/System.err(207): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:492)
09-29 03:56:09.344: WARN/System.err(207): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:477)
09-29 03:56:09.344: WARN/System.err(207): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:317)
09-29 03:56:09.350: WARN/System.err(207): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:273)
09-29 03:56:09.350: WARN/System.err(207): at com.bekeer.mp3player.Mp3ListActivity.parseXML(Mp3ListActivity.java:69)
09-29 03:56:09.350: WARN/System.err(207): at com.bekeer.mp3player.Mp3ListActivity.onOptionsItemSelected(Mp3ListActivity.java:49)
09-29 03:56:09.350: WARN/System.err(207): at android.app.Activity.onMenuItemSelected(Activity.java:2096)
09-29 03:56:09.360: WARN/System.err(207): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:825)
09-29 03:56:09.360: WARN/System.err(207): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139)
09-29 03:56:09.370: WARN/System.err(207): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813)
09-29 03:56:09.370: WARN/System.err(207): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:523)
09-29 03:56:09.370: WARN/System.err(207): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
09-29 03:56:09.370: WARN/System.err(207): at android.view.View.onTouchEvent(View.java:4133)
09-29 03:56:09.370: WARN/System.err(207): at android.widget.TextView.onTouchEvent(TextView.java:6510)
09-29 03:56:09.381: WARN/System.err(207): at android.view.View.dispatchTouchEvent(View.java:3672)
09-29 03:56:09.381: WARN/System.err(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
09-29 03:56:09.381: WARN/System.err(207): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
09-29 03:56:09.381: WARN/System.err(207): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
09-29 03:56:09.381: WARN/System.err(207): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
09-29 03:56:09.391: WARN/System.err(207): at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 03:56:09.391: WARN/System.err(207): at android.os.Looper.loop(Looper.java:123)
09-29 03:56:09.391: WARN/System.err(207): at android.app.ActivityThread.main(ActivityThread.java:4203)
09-29 03:56:09.391: WARN/System.err(207): at java.lang.reflect.Method.invokeNative(Native Method)
09-29 03:56:09.401: WARN/System.err(207): at java.lang.reflect.Method.invoke(Method.java:521)
09-29 03:56:09.401: WARN/System.err(207): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
09-29 03:56:09.401: WARN/System.err(207): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
09-29 03:56:09.401: WARN/System.err(207): at dalvik.system.NativeStart.main(Native Method)
09-29 03:56:09.430: WARN/InputManagerService(53): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43939370
09-29 03:56:09.311: WARN/System.err(207): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 117: mismatched tag
这里说的很明白,解析的时候没有找到匹配的标签。
你这个Mp3ContentHandler是什么定义的,是继承DefaultHandler的吧,肯定有问题
这句也有问题,log说了:
09-29 03:56:09.152: INFO/global(207): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
所以xmlStr是不是太大了?
你是先把xml内容都读出来了是么?
建议这样
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
MyHandler handler = new MyHandler(context, keyboard, defDis.getWidth(), defDis.getHeight());
System.out.println("getMyKeyboard");
parser.parse(context.getAssets().open(config), handler);config就是对应的xml文件名,读取的工作交给xml解析来做。
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;import com.bekeer.model.Mp3Info;public class Mp3ContentHandler extends DefaultHandler{
private List<Mp3Info> infos = null;
private Mp3Info mp3Info = null;
private String tagName = null; public Mp3ContentHandler(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 {
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();
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equals("resource")) {
infos.add(mp3Info);
System.out.println(infos.size());
}
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 {
this.tagName = localName;
if (tagName.equals("resource")) {
mp3Info = new Mp3Info();
}
}
}
<?xml version="1.0" encoding="ISO-8859-1"?><resources>
<resource>
<id>0001</id>
<mp3.name>ÕÅÐÅÕÜ - ±ðÅÂÎÒÉËÐÄ.mp3</mp3.name>
<mp3.size>4642238</mp3.size>
<lrc.name>ÕÅÐÅÕÜ - ±ðÅÂÎÒÉËÐÄ.lrc</lrc.name>
<lrc.size>1782</lrc.size>
</resource> <resource>
<id>0002</id>
<mp3.name>sarah connor - just one last dance.mp3</mp3.name>
<mp3.size>6448786</mp3.size>
<lrc.name>sarah connor - just one last dance.lrc</lrc.name>
<lrc.size>3226</lrc.size>
</resource>
</resources>
这是xml文件 我在本地服务器配置的
现在可以执行xmlReader.parse(new InputSource(new StringReader(xmlStr)));了
但是后面迭代不能执行
这是 黄色的logcat
09-29 05:37:29.730: WARN/UsageStats(64): Unexpected resume of com.android.launcher while already resumed in com.bekeer.mp3player
09-29 05:37:29.830: WARN/InputManagerService(64): Got RemoteException sending setActive(false) notification to pid 265 uid 10022
09-29 05:37:30.609: WARN/ResourceType(64): No package identifier when getting value for resource number 0x7f060000
09-29 05:37:30.619: WARN/ResourceType(64): No package identifier when getting value for resource number 0x7f060001
09-29 05:37:30.808: WARN/ResourceType(64): No package identifier when getting value for resource number 0x7f060000
09-29 05:37:30.820: WARN/ResourceType(64): No package identifier when getting value for resource number 0x7f060001
09-29 05:37:40.140: WARN/KeyCharacterMap(314): No keyboard for id 0
09-29 05:37:40.150: WARN/KeyCharacterMap(314): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
09-29 05:37:41.618: WARN/InputManagerService(64): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43759bf0
还有dinjay发的MyHandler handler = new MyHandler(context, keyboard, defDis.getWidth(), defDis.getHeight());
这里面的参数我不太懂
求教高手,QQ 743700338
07-09 12:53:54.467: WARN/InputManagerService(52): Got RemoteException sending setActive(false) notification to pid 492 uid 10027
07-09 12:53:55.477: WARN/ResourceType(52): No package identifier when getting value for resource number 0x7f060000
07-09 12:53:55.487: WARN/ResourceType(52): No package identifier when getting value for resource number 0x7f060001
07-09 12:53:55.677: WARN/ResourceType(52): No package identifier when getting value for resource number 0x7f060000
07-09 12:53:55.677: WARN/ResourceType(52): No package identifier when getting value for resource number 0x7f060001
07-09 12:53:58.628: WARN/System.err(523): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: no element found
07-09 12:53:58.637: WARN/System.err(523): at org.apache.harmony.xml.ExpatParser.finish(ExpatParser.java:538)
07-09 12:53:58.637: WARN/System.err(523): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:478)
07-09 12:53:58.637: WARN/System.err(523): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:317)
07-09 12:53:58.637: WARN/System.err(523): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:273)
07-09 12:53:58.637: WARN/System.err(523): at com.mp3player.Mp3ListActivity.parse(Mp3ListActivity.java:117)
07-09 12:53:58.637: WARN/System.err(523): at com.mp3player.Mp3ListActivity.updateListView(Mp3ListActivity.java:103)
07-09 12:53:58.648: WARN/System.err(523): at com.mp3player.Mp3ListActivity.onCreate(Mp3ListActivity.java:42)
07-09 12:53:58.648: WARN/System.err(523): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
07-09 12:53:58.648: WARN/System.err(523): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
07-09 12:53:58.648: WARN/System.err(523): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
07-09 12:53:58.648: WARN/System.err(523): at android.app.ActivityThread.access$2100(ActivityThread.java:116)
07-09 12:53:58.648: WARN/System.err(523): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
07-09 12:53:58.648: WARN/System.err(523): at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 12:53:58.648: WARN/System.err(523): at android.os.Looper.loop(Looper.java:123)
07-09 12:53:58.648: WARN/System.err(523): at android.app.ActivityThread.main(ActivityThread.java:4203)
07-09 12:53:58.659: WARN/System.err(523): at java.lang.reflect.Method.invokeNative(Native Method)
07-09 12:53:58.659: WARN/System.err(523): at java.lang.reflect.Method.invoke(Method.java:521)
07-09 12:53:58.659: WARN/System.err(523): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
07-09 12:53:58.659: WARN/System.err(523): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
07-09 12:53:58.659: WARN/System.err(523): at dalvik.system.NativeStart.main(Native Method)
时间太久了 我像是xml标签写错了 仔细检查一下标签