下面这几句代码提示有NullPointerException问题:
其中cwdfMap是一个Map对象 String sDF=cwdfMap.get(CWZBDM).toString();
 double dfValue=Double.parseDouble(sDF);提示错误就是在String sDF =cwdfMap.get(CWZBDM).toString()这行.
但是我在输出的时候这里面是都有值的,
其中有两个是0.00那么为什么会有这种错误提示呢?

解决方案 »

  1.   

    我输出看了里面都有值,为什么还提示说NullPointerException
      

  2.   

    cwdfMap.put(CWZBDM,sValue)在这里我是通过另一个方法initCwdfMap来对Map进行初始化的.首先从数据表当中读出记录,然后把字段名为cwzbdm,的值写入map的key,而把另一个字段的值写入map的value
      

  3.   

    public boolean saveScoreToDB(HttpServletRequest req,HttpServletResponse res){
          HttpSession session = req.getSession(false);//获取session
          String PJLX=(String)session.getAttribute("RWLB");//评级类型
          String PJXH=(String)session.getAttribute("PJXH");//评级序号
          String PJJD=(String)session.getAttribute("PJJD");//评级阶段
          String RWBH=(String)session.getAttribute("SPRWBH");//任务编号
          String LCXH=(String)session.getAttribute("activityId");//流程序号
          //避免空指针
          PJLX=PJLX==null?"":PJLX;
          PJXH=PJXH==null?"":PJXH;
          PJJD=PJJD==null?"":PJJD;
          RWBH=RWBH==null?"":RWBH;
          LCXH=LCXH==null?"":LCXH;
          if(PJJD.equals("")){
             ErrMsg="程序出错,session中取得的PJJD不能为空!";
             YwdzAssist.alert(res,req,ErrMsg,"");
             return false ;
          }
          String sql="",sql1="",sql2="";
          sql="select * from Loan.XT_CWZBHYGXQZ where HYDM='" + HYDM + "' and PJMX In('01','11')";
          System.out.println(sql);
          System.out.println("PJLX="+PJLX+";PJXH="+PJXH+"PJJD="+PJJD+"RWBH="+RWBH+"LCXH="+LCXH);
          DBManage DB=new DBManage();
          DB.setAutoCommit(false);//设置不自动提交
          ResultSet rs=null;
          this.totalScore=0;
          try{
            rs=DB.sqlQuery(sql);
            if(initCwdfMap()){
             while(rs.next()){
                String CWZBDM=rs.getString("CWZBDM").trim();
                String CWYSDM=rs.getString("CWYSDM").trim();
                String sDF= "";            
                sDF=cwdfMap.get(CWZBDM).toString();//取出得分 
                
                double dfValue=Double.parseDouble(sDF);
                totalScore=totalScore + dfValue;
                System.out.println("CWZBDM="+CWZBDM+"-----------CWYSDM="+CWYSDM);
                System.out.println("sDF="+sDF);
                System.out.println("dfValue="+dfValue);
                
                if(PJJD.equals("3")||PJJD.equals("4")){//非流程的处理
                    //-----------------------------更新的sql语句--------------------------------------------
                    sql1 = "update Loan.PJ_GC_CWYS set ZBDF=" + dfValue + ",BBQS1='" + BQBBQS + "',BBQS2='" + SQBBQS
                         +"' where KHBH='" + KHBH + "' and PJLX='" + PJLX+"' and PJXH=" + PJXH + " and PJJD='"
                         + PJJD + "' and CWZBDM='" + CWZBDM + "' and PJMX='01'";
                    //------------------------------插入的sql语句--------------------------------------------
                    sql2 ="insert into Loan.PJ_GC_CWYS(KHBH,PJLX,PJXH,PJJD,RWBH,LCXH,BBQS1,BBQS2,CWYSDM,CWZBDM,ZBDF,PJMX)"
                         +" values('" + KHBH + "','" +PJLX + "'," + PJXH + ",'" + PJJD + "','" + RWBH + "',0,'"
                         + BQBBQS + "','" + SQBBQS + "','" + CWYSDM +"','" + CWZBDM + "'," + dfValue+ ",'01')";
                 }
                 else {//流程的处理
                    //-------------------------------更新的sql语句------------------------------------------
                    int iLCXH=Integer.parseInt(LCXH)-2;
                    sql1 = "update Loan.PJ_GC_CWYS set ZBDF=" + dfValue + ",BBQS1='" + BQBBQS + "',BBQS2='" + SQBBQS
                         +"' where KHBH='" + KHBH + "' and RWBH='" + RWBH + "' and LCXH=" + iLCXH + " and PJJD='"
                         + PJJD + "' and CWZBDM='" + CWZBDM + "' and PJMX='01'";
                    //--------------------------------插入的sql语句------------------------------------------
                    sql2 ="insert into Loan.PJ_GC_CWYS(KHBH,PJLX,PJXH,PJJD,RWBH,LCXH,BBQS1,BBQS2,CWYSDM,CWZBDM,ZBDF,PJMX)"
                         +" values('" + KHBH + "','" +PJLX + "'," + PJXH + ",'" + PJJD + "','" + RWBH + "'," + iLCXH  + ",'"
                         + BQBBQS + "','" + SQBBQS + "','" + CWYSDM + "','" + CWZBDM + "'," + dfValue+ ",'01')";
                 }
                System.out.println(sql1);
                System.out.println(sql2);
                 //debugPrint(sql1);
                 //debugPrint(sql2); edit in 2006-06-27 batman
                 //更新或插入PJ_GC_CWYS
                //System.out.println("sqlUpdateTotalCount="+DB.sqlUpdate(sql1));
                 int totalCount;
                 int insertCount;
                 totalCount = DB.sqlUpdate(sql1);
                 System.out.println("totalCount="+totalCount);
                 if(totalCount <=0){ //若更新条数为0,则插入一条新记录
                    insertCount = DB.sqlUpdate(sql2);
                  System.out.println("insertCount="+insertCount);
                  }
                 
                if(!DB.getErrMsg().trim().equals("")){
                 DB.rollback();
                 ErrMsg="数据存入[PJ_GC_CWYS]表失败!错误原因 :"+DB.getErrMsg();
                 System.out.println(ErrMsg);
                 YwdzAssist.alert(res,req,ErrMsg,"");
                 return false;
                }
                //超过界限,取极值
                //if(totalScore>100) totalScore=100;
                System.out.println("totalScore="+totalScore);
                if(totalScore<0) totalScore=0;
                DB.commit();//提交事务
             }
            }      }
          catch(SQLException sqlE){
             DB.rollback();//事务回滚
             ErrMsg="数据存入[PJ_GC_CWYS]表失败!错误原因 :"+sqlE.getMessage();
             System.out.println(ErrMsg);
             YwdzAssist.alert(res,req,ErrMsg,"");
             return false;
          }
          finally{
             if(rs!=null){
                try{rs.close();rs=null;}
                catch(SQLException sqlE1){}
             }
             if(DB!=null){
                DB.close();
                DB=null;
             }
          }
          return true;
      }
      

  4.   

    问题有可能出现在下面这句...
    String CWZBDM=rs.getString("CWZBDM").trim();
    你把CWZBDM输出到控制台看看它的值
      

  5.   

    为null时是不能toString()的!!!!!!!!!!!!!!!!!!!!
      

  6.   

    cwdfMap.get(CWZBDM)为null不能toString()
    差一下initCwdfMap()时有没有把CWZBDM的值的value设进去
      

  7.   

    这样用:
    String sDF=(String)cwdfMap.get(CWZBDM);因为cwdfMap.get(CWZBDM)获得的可能是null,null.toString();肯定是异常喽;或者这样改:Object obj = cwdfMap.get(CWZBDM);
    if (null != obj) {
    String sDF=obj.toString();
    }