java.lang.NumberFormatException

java.lang.NumberFormatException

相关截图:

http://img1.sycdn.imooc.com//climg/6017e25f09fb35ce00000000.jpg

//问题描述:XmlDataSource.java第57行如下所示,XmlDataSource.java完整代码附加在其后
//painting.setCategory(Integer.parseInt(element.elementText("category")));

package com.imooc.mgallery.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import com.imooc.mgallery.entity.Painting;

/**
*
* 数据源类,用于将XML文件解析为Java对象
*
*/
public class XmlDataSource {
// 通过static关键字来保证数据全局唯一
private static List<Painting> data = new ArrayList();
private static String dataFile;
static {
// 得到painting.xml文件完整物理路径
// c:\new style\painting.xml
// c:\new%20style\painting.xml
dataFile = XmlDataSource.class.getResource("/painting.xml").getPath();
reload();

}

private static void reload() {
URLDecoder decoder = new URLDecoder();
try {
decoder.decode(dataFile, "UTF-8");
System.out.println(dataFile);
// 利用Dom4j对XML进行解析
SAXReader reader = new SAXReader();
// 1. 获取Document文档对象
Document document = reader.read(dataFile);
// 2.Xpath得到XML节点集合
List<Node> nodes = document.selectNodes("/root/painting");
data.clear();
for (Node node : nodes) {
Element element = (Element) node;
String id = element.attributeValue("id");
String pname = element.elementText("pname");
Painting painting = new Painting();
painting.setId(Integer.parseInt(id));
painting.setPname(pname);
painting.setCategory(Integer.parseInt(element.elementText("category")));
painting.setPrice(Integer.parseInt(element.elementText("price")));
painting.setPreview(element.elementText("preview"));
painting.setDescription(element.elementText("description"));
data.add(painting);
// System.out.println(id+":" + pname);
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 获取所有Painting对象
* @return Painting List
*/
public static List<Painting> getRawPainting() {
return data;
}
public static void append(Painting painting) {
//1.读取XML文档,得到document对象
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read(dataFile);
//2.创建新的painting节点
Element root = document.getRootElement();//<root>
Element p = root.addElement("painting");
//3.创建painting节点的各个子节点
p.addAttribute("id", String.valueOf(data.size()+1));
p.addElement("pname").setText(painting.getPname());
p.addElement("category").setText(painting.getCategory().toString());
p.addElement("price").setText(painting.getPrice().toString());
p.addElement("preview").setText(painting.getPreview());
p.addElement("description").setText(painting.getDescription());
//4.写入XML,完成追加操作
writer = new OutputStreamWriter(new FileOutputStream(dataFile),"UTF-8");
document.write(writer);
System.out.println(dataFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(writer != null) {
try {
writer.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reload();//内存与文件数据一致
}

}

public static void main(String[] argn) {
// new XmlDataSource();
// List<Painting> ps = XmlDataSource.getRawPainting();
// System.out.println(ps);

Painting p = new Painting();
p.setPname("测试油画");
p.setCategory(1);
p.setPrice(12000);
p.setPreview("/upload/10.jpg");
p.setDescription("测试油画描述");
XmlDataSource.append(p);
}
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-02-02 10:18:08

同学你好,1、NumberFormatException异常是数字格式转换异常,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出这个异常。

2、建议同学查看第57行左右的代码,应该是数据转换时,出现的问题。如:同学可查看element.attributeValue("category")是否可以获取到数据。或同学可以添加一个if判断,判断是否为空,如果为空,则跳出此次循环。

3、在添加时,应该是无法添加空值的,同学也可以在添加时进行判断。

注:建议同学查看xml文件中的数据,是否有的category值为空。

祝学习愉快!

  • 提问者 慕设计5260620 #1

    老师,第57行我已经在问题中指出来了,即

    painting.setCategory(Integer.parseInt(element.elementText("category")));


    2021-02-02 10:54:36
  • 好帮手慕小尤 回复 提问者 慕设计5260620 #2

    同学你好,刚是老师理解错误,同学可重新查看:

    1、关于element.elementText("category")和id值是一样的,同学可先查看category是否可以获取到数据。或同学可以添加一个if判断,判断category是否为空,如果为空,则跳出此次循环。如下图所示:

    http://img1.sycdn.imooc.com//climg/6018c61f096f401b09390205.jpg

    2、在添加时,应该是无法添加空值的,同学可查看添加时的数据。如下图所示:

    http://img1.sycdn.imooc.com//climg/6018c95c095d650811170545.jpg

    ​祝学习愉快!

    2021-02-02 11:41:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师