SAX解析错误,org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
2016-03-18 16:35
645 查看
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: FATAL EXCEPTION: main
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{tech.androidstudio.xmlpullparserdemo/tech.androidstudio.xmlpullparserdemo.MainActivity}: java.lang.NumberFormatException:
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:123)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:3683)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:507)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: Caused by:
java.lang.NumberFormatException:
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at
org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.Double.parseDouble(Double.java:318)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MyHandler.characters(MyHandler.java:76)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:165)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:518)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MainActivity.saxGetList(MainActivity.java:146)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MainActivity.onCreate(MainActivity.java:43)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:123)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:3683)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:507)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
原因分析:
一开始我以为是我转换时候的错误,后来发现其实是我的全局变量在endElement 里面没有设置为空,的原因,当读完了endElement 以后,它继续读取后面的内容,
例如下面的信息,例如下面的</money>的节点后面就有换行符号,下一行读取到</worker>之前还有Tab的符号。所以读取的Tab
信息会覆盖原来的4000的这个信息.所以再赋值的时候 就是将一个Tab的信息复制给Double 的了,所以报错了。
解决办法:
在endElement 里面将全局变量设置为空。
全部代码如下:
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{tech.androidstudio.xmlpullparserdemo/tech.androidstudio.xmlpullparserdemo.MainActivity}: java.lang.NumberFormatException:
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:123)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:3683)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:507)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: Caused by:
java.lang.NumberFormatException:
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at
org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.Double.parseDouble(Double.java:318)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MyHandler.characters(MyHandler.java:76)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:165)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.appendBytes(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:518)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:479)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:318)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:275)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MainActivity.saxGetList(MainActivity.java:146)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at tech.androidstudio.xmlpullparserdemo.MainActivity.onCreate(MainActivity.java:43)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:123)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:3683)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:507)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-18 07:46:41.328 27102-27102/tech.androidstudio.xmlpullparserdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
原因分析:
一开始我以为是我转换时候的错误,后来发现其实是我的全局变量在endElement 里面没有设置为空,的原因,当读完了endElement 以后,它继续读取后面的内容,
例如下面的信息,例如下面的</money>的节点后面就有换行符号,下一行读取到</worker>之前还有Tab的符号。所以读取的Tab
信息会覆盖原来的4000的这个信息.所以再赋值的时候 就是将一个Tab的信息复制给Double 的了,所以报错了。
<workers> <worker id="AQ01"> <name>Mark</name> <sex>男</sex> <status>经理</status> <address>北京</address> <money>4000</money> </worker>
解决办法:
在endElement 里面将全局变量设置为空。
全部代码如下:
package tech.androidstudio.xmlpullparserdemo; import android.util.Log; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import java.util.ArrayList; import java.util.List; /** * Created by Kodulf on 2016/3/18. */ public class MyHandler extends DefaultHandler { List<Worker> mList; Worker mWorker; String mQualifiedName; /** <worker id="AQ01"> <name>Mark</name> <sex>男</sex> <status>经理</status> <address>北京</address> <money>4000</money> </worker> */ @Override public void startDocument() throws SAXException { super.startDocument(); Log.d("Kodulf", "SAX start Document"); //在 startDocument 里面初始化List mList = new ArrayList<Worker>(); } //这里的 qName-》qualified name 限定名 ,这个 参数要设置为成员变量,因为下面的characters里面需要用到。 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); mQualifiedName=qName; //如果startElement是worker的话,<worker id="AQ01">,要获取属性id的 值 if("worker".equals(qName)){ mWorker = new Worker(); int length = attributes.getLength(); for (int i = 0; i < length; i++) { String attributeName = attributes.getQName(i); if("id".equals(attributeName)){ String attributeValue = attributes.getValue(i); mWorker.setId(attributeValue); } } } } @Override public void characters(char[] ch, int start, int length) throws SAXException { /** <name>Mark</name> <sex>男</sex> <status>经理</status> <address>北京</address> <money>4000</money> */ super.characters(ch, start, length); String nodeValue = new String(ch,start,length); if("name".equals(mQualifiedName)){ mWorker.setName(nodeValue); }else if("sex".equals(mQualifiedName)){ mWorker.setSex(nodeValue); }else if("status".equals(mQualifiedName)){ mWorker.setStatus(nodeValue); }else if("address".equals(mQualifiedName)){ mWorker.setAddress(nodeValue); }else if("money".equals(mQualifiedName)){ //注意这里的Money 是double 类型的,所以要转换一下 mWorker.setMoney(Double.parseDouble(nodeValue)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); //TODO 一定要将全局变量mQualifiedName 设置为空,//例如下面的</money>的节点后面就有换行符号,下一行读取到</worker>之前还有Tab的符号。 // 所以读取的Tab 信息会覆盖原来的4000的这个信息.所以再赋值的时候 就是将一个Tab的信息复制给Double 的了,所以报错了。 mQualifiedName=null; //判断是否是worker,如果是的话,就将mWorker 添加到list 里面去 if("worker".equals(qName)){ mList.add(mWorker); } } @Override public void endDocument() throws SAXException { super.endDocument(); Log.d("Kodulf", "SAX end Document"); } public List<Worker> getmList(){ return mList; } }
相关文章推荐
- opencv和apache和c#的关联
- How-to: Install Apache Zeppelin on CDH
- Linux中的Apache服务查看和启动的方法
- centos7.0 yum 安装php服务器(apache2.4 php 5.4/5.5/5.6/7.0)
- 编译安装apache
- apache和opencv和linq的关联
- commonio和jetty和apache的关联
- excel和javascript和apache的关联
- apache和aspx和javascript的关联
- spring和ruby和apache的关联
- php和apache和dll的关联
- Apache流处理框架对比
- Apache多端口多目录配置方法
- CentOS下查看apache,php,mysql版本信息
- MAC 配置 多端口(虚拟主机) apache 总结
- Apache安装问题:configure: error: APR not found . Please read the documentation
- Apache-openmeetings2.x-3.x的安装手册
- mac osx 配置apache ant binary
- 安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试
- 安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试