簡體   English   中英

Java字符串到長轉換

[英]Java String to Long Conversion

我知道一個簡單的問題,但我看不出有什么問題。 我有以下代碼:

String dxorderId = request.getParameter("orderid");
    long orderid = Long.parseLong((dxorderId));

它位於從PL / SQL過程調用的servlet內部。 dxorderid的值是從所調用頁面的URL中的參數中檢索的。 因此,它似乎被視為字符串。 因此,我必須將字符串轉換為long。 但是,當我使用上面的代碼時,出現以下錯誤:

14-Nov-2013 13:07:41 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.zf.proceed.service.servlets.ViewOrderServlet] in context with path [/webapp] threw exception
java.lang.NumberFormatException: null
at java.lang.Long.parseLong(Long.java:372)
at java.lang.Long.parseLong(Long.java:461)
at com.zf.proceed.service.servlets.ViewOrderServlet.doRequest(ViewOrderServlet.java:28)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doRequest(ProceedBaseServlet.java:106)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doGet(ProceedBaseServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
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:619)

我知道這意味着無法解析,但我不知道為什么無法解析。 輸入的值是1454。

恐怕值不是1454 該值為null ,如以下行所示:

java.lang.NumberFormatException: null

您需要檢查參數名稱,並確保使用正確的名稱,包括大小寫和不可見字符。

java.lang.NumberFormatException: null  

如果String dxorderId為null,則它將引發NumberFormatException

檢查dxorderId不為null且不為empty string

if(dxorderId != null && !dxorderId.equals(""))
{
  long orderid = Long.parseLong((dxorderId));
}  

來自oracle docs NumberFormatException

public class NumberFormatException
       extends IllegalArgumentException

引發以指示應用程序已嘗試將字符串轉換為數字類型之一,但是該字符串沒有適當的格式。

使用createLongtoLong從Apache的NumberUtils方法。

仔細看看該異常: java.lang.NumberFormatException: null

上面的語句表明dxorderId值為null。 問題是這條線:

String dxorderId = request.getParameter("orderid");

好吧, NumberFormatException意味着給定的數據不能轉換為Long因為它不表示Long值,因此問題出在String的源頭,而不是Java Long-Parser。

在您的特定情況下,解析器指出給定的值為null ,因此您的request.getParameter("orderid"); 返回null

java.lang.NumberFormatException: null

從異常信息中,我們可以了解到dxorderidnull ,這會導致java.lang.NumberFormatException

在解析數據之前,您需要先檢查要解析的值是null還是

錯誤是由於此行。

String dxorderId = request.getParameter("orderid");

檢查參數名稱“ orderid”是否正確,或確保其值不為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM