小弟android新手,请教一个xml解析的问题
问题:xmlReader.parse(new InputSource(new StringReader(xmlStr))); 这行代码为什么执行不了?
理由:System.out.println("xml------------");放在上行代码前能打印出来,放到之后就打印不出来,并且log里面提醒的也是这行代码!
全部代码如下:
package your.napo;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParserFactory;
import napo.download.HttpDownload;
import napo.model.Mp3Info;
import napo.xml.Mp3ListContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class Mp3player extends ListActivity {
/** Called when the activity is first created. */
private static final int UPDATE = 1;
private static final int ABOUT = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, UPDATE, 1, R.string.mp3list_update);
menu.add(0, ABOUT, 2, R.string.mp3list_about);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == UPDATE) {
String xml = downloadXML("http://192.168.1.2:8080/mp3/resources.xml");
parse(xml);
}
else if(item.getItemId() == ABOUT) {
}
return super.onOptionsItemSelected(item);
}
private String downloadXML(String urlStr) {
HttpDownload httpDownload = new HttpDownload();
String result = httpDownload.download(urlStr);
return result;
}
private List<Mp3Info> parse(String xmlStr) {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
List<Mp3Info> infos = new ArrayList<Mp3Info>();
try {
XMLReader xmlReader = saxParserFactory.newSAXParser().getXMLReader();
Mp3ListContentHandler mp3ListContentHandler = new Mp3ListContentHandler(infos);
xmlReader.setContentHandler(mp3ListContentHandler);
System.out.println("xml------------");
xmlReader.parse(new InputSource(new StringReader(xmlStr)));
for (Iterator iterator = infos.iterator(); iterator.hasNext();) {
Mp3Info mp3Info = (Mp3Info) iterator.next();
System.out.println(mp3Info);
}
} catch(Exception e) {
e.printStackTrace();
}
return infos;
}
}
Log如下:
05-23 06:43:08.289: W/System.err(1102): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 377: mismatched tag
05-23 06:43:08.289: W/System.err(1102): at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:507)
05-23 06:43:08.298: W/System.err(1102): at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:492)
05-23 06:43:08.298: W/System.err(1102): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:308)
05-23 06:43:08.298: W/System.err(1102): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:264)
05-23 06:43:08.298: W/System.err(1102): at your.napo.Mp3player.parse(Mp3player.java:68)
05-23 06:43:08.298: W/System.err(1102): at your.napo.Mp3player.onOptionsItemSelected(Mp3player.java:45)
05-23 06:43:08.298: W/System.err(1102): at android.app.Activity.onMenuItemSelected(Activity.java:2195)
05-23 06:43:08.298: W/System.err(1102): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:730)
05-23 06:43:08.298: W/System.err(1102): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
05-23 06:43:08.309: W/System.err(1102): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
05-23 06:43:08.309: W/System.err(1102): at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:532)
05-23 06:43:08.309: W/System.err(1102): at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122)
05-23 06:43:08.309: W/System.err(1102): at android.view.View$PerformClick.run(View.java:8816)
05-23 06:43:08.309: W/System.err(1102): at android.os.Handler.handleCallback(Handler.java:587)
05-23 06:43:08.309: W/System.err(1102): at android.os.Handler.dispatchMessage(Handler.java:92)
05-23 06:43:08.319: W/System.err(1102): at android.os.Looper.loop(Looper.java:123)
05-23 06:43:08.319: W/System.err(1102): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-23 06:43:08.319: W/System.err(1102): at java.lang.reflect.Method.invokeNative(Native Method)
05-23 06:43:08.319: W/System.err(1102): at java.lang.reflect.Method.invoke(Method.java:521)
05-23 06:43:08.319: W/System.err(1102): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-23 06:43:08.329: W/System.err(1102): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-23 06:43:08.329: W/System.err(1102): at dalvik.system.NativeStart.main(Native Method)
05-23 06:43:08.369: W/InputManagerService(68): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44f17018
05-23 06:45:03.119: D/dalvikvm(128): GC_FOR_MALLOC freed 12929 objects / 574056 bytes in 1067ms
05-23 06:45:16.269: D/SntpClient(68): request time failed: java.net.SocketException: Address family not supported by protocol
[解决办法]
mismatched tag
XML文件缺少标识,打开这个文件看一下是不是缺少了结束标记之类的。
[解决办法]
不是定义了Mp3ListContentHandler 么,进去看看里面解析的过程中是到哪儿错了。
[解决办法]
xml文件错误了,一个字母之错
<resoutces>
</resources>