2014-11-01 95 views
0

希望有人能帮助我解决我遇到的一个非常奇怪的问题。非常奇怪的空指针问题

在下面的代码中,我试图打印出请求中传递的数字。它是一个叫做数字的字符串

String number = request.getParameter("number"); 

^字符串

out.print(number); 

^印刷数量

这与一个空指针异常失败的那一刻,但是当我打印出来number.length()它打印长度。

堆栈跟踪还表示,空指针在这一行存在的

JSONObject JSONOBJ = new JSONObject(APIResponse.Response); 

任何人能解释这是怎么回事?

谢谢!

<% 
if (request.getParameter("number") != null) 
{ 

    String number = request.getParameter("number"); 
    if (number.matches("^[0-9]+")) 
    { 
%> 

     <% 
      ApiRequest APIRequest = new ApiRequest(
          "/broadband/availability/" + number, "GET", null); 

        /* 
        COULD ALSO PASS POSTCODE BUT ONLY USING CLI FOR NOW 
        */ 

        ApiClient APIClient = new ApiClient(); 
        api.ApiResponse APIResponse = APIClient.send(APIRequest); 

        JSONObject JSONOBJ = new JSONObject(APIResponse.Response); 

        JSONArray JSONARR = JSONOBJ.getJSONArray("products"); 
     %> 

       Services for 
       <% 
       out.print(number); 
      %> 
+0

什么是“out”?它在哪里设置? (另外,你是否使用了一些你没有在标签中提到的框架?我不知道这些''%'东西是什么。) – ajb 2014-11-01 22:57:09

+0

对不起,应该提到这是一个JSP。 <% %>之外是HTML。 Out是浏览器。 – FMC 2014-11-01 22:57:50

+0

你有没有试过修剪'String'? 'String number = request.getParameter(“number”); number =(number!= null)? number.trim():“0”;' – 2014-11-01 23:20:30

回答

0

如果你真的把此行的NPE:

JSONObject JSONOBJ = new JSONObject(APIResponse.Response); 

那么唯一的解释就是APIResponse(呸!)是null。这意味着,

APIClient.send(APIRequest); 

(yuck两次!!)返回null。没有看到这些APIxxxx类的源代码和/或javadoc,无法确定什么原因。


这是您提供足够的特异性以进行准确诊断的唯一证据。

你还提到打印一个号码时得到一个NPE。但我怀疑是不是真的发生。 (首先,如果NPE发生在你的所说的发生在那一行,那么它不会在那一点打印一个数字。)