请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

测试购物车那一节报错

测试add,返回报空指针

</pre></p><p><b>root cause</b> <pre>java.lang.NullPointerException com.mmall.service.impl.CartServiceImpl.getCartVoLimit(CartServiceImpl.java:161) com.mmall.service.impl.CartServiceImpl.list(CartServiceImpl.java:83) com.mmall.service.impl.CartServiceImpl.add(CartServiceImpl.java:57) com.mmall.controller.portal.CartController.add(CartController.java:43) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)


找到CartServiceImpl.java 161行

cartTotalPrice = BigDecimalUtil.add(cartTotalPrice.doubleValue(),cartProductVo.getProductTotalPrice().doubleValue());


是这个东东,和老师的源码比对,没发现不同,最后直接重新copy一份老师的cartserviceimpl过来,报错依旧

tomcat日志如下

[08:27:10.260][DEBUG][c.m.dao.CartMapper.selectCartByUserId][http-bio-8088-exec-4] ==> Parameters: 1(Integer)

[08:27:10.261][DEBUG][c.m.dao.CartMapper.selectCartByUserId][http-bio-8088-exec-4] <==      Total: 2

[08:27:10.262][DEBUG][org.mybatis.spring.SqlSessionUtils][http-bio-8088-exec-4] Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@5c1649cf]

[08:27:10.276][DEBUG][org.mybatis.spring.SqlSessionUtils][http-bio-8088-exec-4] Creating a new SqlSession

[08:27:10.276][DEBUG][org.mybatis.spring.SqlSessionUtils][http-bio-8088-exec-4] SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@29c5322b] was not registered for synchronization because synchronization is not active

[08:27:10.278][DEBUG][o.m.s.t.SpringManagedTransaction][http-bio-8088-exec-4] JDBC Connection [jdbc:mysql://192.168.0.168:3306/mmall_learning?characterEncoding=utf-8, UserName=mmall@192.168.0.9, MySQL-AB JDBC Driver] will not be managed by Spring

[08:27:10.279][DEBUG][c.m.dao.ProductMapper.selectByPrimaryKey][http-bio-8088-exec-4] ==>  Preparing: select id, category_id, name, subtitle, main_image, sub_images, detail, price, stock, status, create_time, update_time from mmall_product where id = ? 

[08:27:10.279][DEBUG][c.m.dao.ProductMapper.selectByPrimaryKey][http-bio-8088-exec-4] ==> Parameters: 1(Integer)

[08:27:10.280][DEBUG][c.m.dao.ProductMapper.selectByPrimaryKey][http-bio-8088-exec-4] <==      Total: 0

[08:27:10.281][DEBUG][org.mybatis.spring.SqlSessionUtils][http-bio-8088-exec-4] Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@29c5322b]

数据库里的数据是原始数据,也就是说在add时,是要新增cart的,一路调用,到这个核心方法时就报空指针了。

百思不得其解,请老师帮忙看看?

正在回答

7回答

http://blog.csdn.net/victor_cindy1/article/details/52336983


这个文章可以帮到你。如果是eclipse 可以再找一下eclipse的

0 回复 有任何疑惑可以回复我~
  • 提问者 章小熊熊 #1
    非常感谢!老师敬业
    回复 有任何疑惑可以回复我~ 2017-05-30 22:06:40
提问者 章小熊熊 2017-05-30 22:05:09

弄了一天了,始终找不到问题,最后发现数据库里cart表有一条userid=1,productid=1的可疑记录,也不晓得是听视频如何操作加上去的,反正我没直接写sql操作数据库。

把这一条删掉,报错解决。

汗。。。

1 回复 有任何疑惑可以回复我~
  • Geely #1
    赞!那就是因为这个数据错误造成的NPE。解决了就好,而且学会了debug!!!真的太赞了!!付出总会有回报的~~
    回复 有任何疑惑可以回复我~ 2017-05-30 23:22:35
  • 我也是。。。怎么把记录删了就解决联网呀
    回复 有任何疑惑可以回复我~ 2019-05-27 15:40:32
  • 我也是。。为什么这个删了就解决了啊
    回复 有任何疑惑可以回复我~ 2019-11-22 19:03:38
提问者 章小熊熊 2017-05-30 09:08:46

注释掉

//                if(cartItem.getChecked() == Const.Cart.CHECKED){
//                    //如果已经勾选,增加到整个的购物车总价中
//                    cartTotalPrice = BigDecimalUtil.add(cartTotalPrice.doubleValue(),cartProductVo.getProductTotalPrice().doubleValue());
//                }


然后就不报错了,只是逻辑少了totalprice。

奇怪,这里为什么会报错?

1 回复 有任何疑惑可以回复我~
  • 我的错误也跟你一样,也没解决,你解决了吗
    回复 有任何疑惑可以回复我~ 2019-05-27 14:39:29
提问者 章小熊熊 2017-05-30 16:13:58

后面继续step out ,还跳转到了如图的地方终止

https://img1.sycdn.imooc.com/szimg//592d29c00001218e19400864.jpg

0 回复 有任何疑惑可以回复我~
提问者 章小熊熊 2017-05-30 16:08:51

设置了断点,step out一路执行,对象都是有值的。

然后在

cartTotalPrice = BigDecimalUtil.add(cartTotalPrice.doubleValue(),cartProductVo.getProductTotalPrice().doubleValue());

这个断点再step out就跳转到public class InvocableHandlerMethod extends HandlerMethod这个方法的

private Object invoke(Object... args) throws Exception 方法了,如下图所示。


https://img1.sycdn.imooc.com/szimg//592d27fc0001d64214720728.jpg

0 回复 有任何疑惑可以回复我~
提问者 章小熊熊 2017-05-30 11:53:25

初次编程,debug是指以debug模式启动tomcat吗?要设置断点吗?

还有,怎么查看每个对象的值?

不好意思,请指教啊。

0 回复 有任何疑惑可以回复我~
Geely 2017-05-30 11:37:34

hi 同学多余NPE其实是最容易解决的,可以debug一下,到那一行,挨个对象看一下,看看是哪个为空,我想这个是一个解决问题的思路。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信