如何在JavaServlet中将字符串转换为double?

如何在JavaServlet中将字符串转换为double?,java,android,string,double,Java,Android,String,Double,我将纬度和经度作为url参数传递给java servlet。我想使用hibernate将这些纬度和经度存储到mySQL数据库中。为了将字符串转换为Double,我使用了下面的代码,但它给了我一个nullPointerException FileWriter fstream = new FileWriter("out2.txt"); req.setCharacterEncoding("UTF-8"); resp.setChar

我将纬度和经度作为url参数传递给java servlet。我想使用hibernate将这些纬度和经度存储到mySQL数据库中。为了将字符串转换为Double,我使用了下面的代码,但它给了我一个nullPointerException

            FileWriter fstream = new FileWriter("out2.txt");
            req.setCharacterEncoding("UTF-8");
            resp.setCharacterEncoding("UTF-8");
            String par1 =  req.getParameter("param1");
            String par2 = req.getParameter("param2");
            BufferedWriter out = new BufferedWriter(fstream);
            out.append(par1);
            out.append("  ");
            out.append(par2);
            double lat=0.0;
            double lon=0.0;
            try
            {
              lat =Double.parseDouble(par1);
            }
            catch(NumberFormatException e)
            {
              //not a double
            }
            try
            {
              lon= Double.parseDouble(par2);
            }
            catch(NumberFormatException e)
            {
              //not a double
            }
我的控制台中出现以下错误:

SEVERE: Servlet.service() for servlet [org.spark.servlet.PostDataReceiverServlet] in context with path [/HelloServlet] threw exception
java.lang.NullPointerException
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:991)
    at java.lang.Double.parseDouble(Double.java:510)
    at org.spark.servlet.PostDataReceiverServlet.doGet(PostDataReceiverServlet.java:48)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:269)
           at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
如果我删除这两个parseDouble语句,代码就可以正常工作。
@我非常确定par1或par2都不是空的。我刚刚检查了一下,在我的文件中得到了以下输出<代码>28.500788 77.395829。这些是我从android应用程序发送的坐标。

很可能这两行中的一行或两行都没有返回任何值:

String par1 = req.getParameter("param1");
String par2 = req.getParameter("param2");
这就是你收到NPE的原因

尝试:

在进行类型转换之前,只需验证一下。req.getParameter(“param1”)是否返回null?您正在传递这些参数吗

解析前检查:

if(par1 != null) lat =Double.parseDouble(par1);
if(par2 != null) lon= Double.parseDouble(par2);

我非常确定par1或par2都是空的

像下面的代码片段一样修改代码

public static double parseDoubleSafely(String str) {
    double result = 0;
    try {
        result = Double.parseDouble(str);
    } catch (NullPointerException npe) {
        //sysout found null
        return 0; 
    } catch (NumberFormatException nfe) {
        //sysout NFE 
        return 0; 
    }
    return result;
}
像这样试试看

        FileWriter fstream = new FileWriter(new File("out2.txt"),true);
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        String par1 =  req.getParameter("param1");
        String par2 = req.getParameter("param2");
        BufferedWriter out = new BufferedWriter(fstream);

        out.append(par1);
        out.append("  ");
        out.append(par2);
        double lat=0.0;
        double lon=0.0;
        try
        {
///////////////////////////null Condition chk within Single try///////////

         if ((part1.equals(null)) & (part2.equals(null)))
        {
          lat =Double.parseDouble(par1);
          lon= Double.parseDouble(par2);
        }

///////////////////////////null Condition chk within Single try///////////

        }
        catch(NumberFormatException e)
        {
          System.out.println("One or both of the value is null");
        }

进行此更改并重试。

您确定
par1
不是空的吗?我非常确定part1是空的,因为您在尝试解析它时会得到一个NPE。说到这里,你的问题就在于你的getParameter行是的。早些时候,我正在将这两个参数写入一个文件,它工作正常;试试这个语句,检查par1值,让我们知道no Jimmy,正如我所评论的,我正在将这些参数写入一个文件,然后手动输入数据库。现在我正在使用hibernate来实现这一点,所以我想先将这些字符串转换为双精度字符串。
        FileWriter fstream = new FileWriter(new File("out2.txt"),true);
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        String par1 =  req.getParameter("param1");
        String par2 = req.getParameter("param2");
        BufferedWriter out = new BufferedWriter(fstream);

        out.append(par1);
        out.append("  ");
        out.append(par2);
        double lat=0.0;
        double lon=0.0;
        try
        {
///////////////////////////null Condition chk within Single try///////////

         if ((part1.equals(null)) & (part2.equals(null)))
        {
          lat =Double.parseDouble(par1);
          lon= Double.parseDouble(par2);
        }

///////////////////////////null Condition chk within Single try///////////

        }
        catch(NumberFormatException e)
        {
          System.out.println("One or both of the value is null");
        }
 String par1 =  (String) req.getParameter("param1");
 String par2 =  (String) req.getParameter("param2");