Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java访问Servlet响应时出现NullPointerException_Java - Fatal编程技术网

从Java访问Servlet响应时出现NullPointerException

从Java访问Servlet响应时出现NullPointerException,java,Java,我正在从我的Java文件调用一个Java servlet。servlet文件具有返回JSON字符串的SOP。现在,我希望在Java代码中使用该字符串,然后将其解析为XML 我的代码如下: URL urlS = new URL (servletURL); URLConnection urlc; urlc = urlS.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInpu

我正在从我的Java文件调用一个Java servlet。servlet文件具有返回JSON字符串的SOP。现在,我希望在Java代码中使用该字符串,然后将其解析为XML

我的代码如下:

URL urlS = new URL (servletURL);
URLConnection urlc;
urlc = urlS.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream()));

String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println("We got JSON Buddy: "+inputLine);
JSONObject js = new JSONObject(inputLine);
System.out.println("We got json object js: "+js.toString());
in.close();
问题是我的Java代码SOP是:

12-02 10:30:12.254: I/System.out(24169): We got JSON Buddy: {"movies": { "total": 19, "movie":[{"cover":"http://content9.flixster.com/movie/11/16/04/11160419_pro.jpg","tile":"A Very Harold & Kumar 3D Christmas","MovieDuration":"(R , 1 hr. 29 min.)","showtime":"                                                                                                                                                                                                                                                                                                                                                                                                                                                                           9:35 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         12:00 AM                                                                                                                                                                                                                                                                                                                                                                                                                                                ","theatre":"Rave Motion Pictures 18 + IMAX","url":"http://www.flixster.com/movie/a-very-harold-and-kumar-christmas"},{"cover":"http://content6.flixster.com/movie/11/16/12/11161272_pro.jpg","tile":"Arthur Christmas 3D","MovieDuration":"(PG , 1 hr. 37 min.)","showtime":"                                                                                                                                                                                                                                                                                                                                                                                                                                                                           12:15 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         3:00 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         5:35 PM                                                                                                                                                                                                                                                                                                                                                                                                                                                ","theatre":"Rave Motion Pictures 18 + IMAX","url":"http://www.flixster.com/movie/arthur-christ
12-02 10:30:12.266: I/System.out(24169): Exception: java.lang.NullPointerException

问题是我没有在inputLine中获得完整的输出,另一个问题是NullPointerException。我不知道为什么会发生这种情况。

您正在做的是:

  while ((inputLine = in.readLine()) != null)
                System.out.println("We got JSON Buddy: "+inputLine);
要终止循环,
inputLine
必须为null,因此当您到达此处时:
JSONObject js=new JSONObject(inputLine)

您将得到一个空指针异常。

您正在执行的循环是:

  while ((inputLine = in.readLine()) != null)
                System.out.println("We got JSON Buddy: "+inputLine);
要终止循环,
inputLine
必须为null,因此当您到达此处时:
JSONObject js=new JSONObject(inputLine)
您将得到一个空指针异常。

看看这是否更好:

        URL urlS = new URL (servletURL);
        URLConnection urlc;
        urlc = urlS.openConnection();
        BufferedReader in = new BufferedReader(new         InputStreamReader(urlc.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("We got JSON Buddy: "+inputLine);
            JSONObject js = new JSONObject(inputLine);            
            System.out.println("We got json object js: "+js.toString());
        }
        in.close();
看看这是否更好:

        URL urlS = new URL (servletURL);
        URLConnection urlc;
        urlc = urlS.openConnection();
        BufferedReader in = new BufferedReader(new         InputStreamReader(urlc.getInputStream()));
        String inputLine;
        while ((inputLine = in.readLine()) != null) {
            System.out.println("We got JSON Buddy: "+inputLine);
            JSONObject js = new JSONObject(inputLine);            
            System.out.println("We got json object js: "+js.toString());
        }
        in.close();

看看你在这里做什么:

while ((inputLine = in.readLine()) != null)
    System.out.println("We got JSON Buddy: "+inputLine);
JSONObject js = new JSONObject(inputLine);
您一直在读取,直到
inputLine
为空。然后你打电话:

因此,您的代码有效地:

while ((inputLine = in.readLine()) != null)
    System.out.println("We got JSON Buddy: "+inputLine);
JSONObject js = new JSONObject(null);

大概这就是问题所在。所以,问题是:你想在哪里循环?

看看你在这里做什么:

while ((inputLine = in.readLine()) != null)
    System.out.println("We got JSON Buddy: "+inputLine);
JSONObject js = new JSONObject(inputLine);
您一直在读取,直到
inputLine
为空。然后你打电话:

因此,您的代码有效地:

while ((inputLine = in.readLine()) != null)
    System.out.println("We got JSON Buddy: "+inputLine);
JSONObject js = new JSONObject(null);


大概这就是问题所在。所以,问题是:你想在哪里循环?

是的。。奇怪的输入线仍然显示一些数据。。。我应该为此清理项目吗?什么意思,它“仍然显示一些数据?”是指在调试器中?如果您只是谈论log语句,那是因为第一次通过循环时,inputLine不是null,所以控件进入主体并打印出log语句。直到第二次迭代,它才被设置为null,然后控制退出循环并继续下一个语句。。谢谢你的澄清。。奇怪的输入线仍然显示一些数据。。。我应该为此清理项目吗?什么意思,它“仍然显示一些数据?”是指在调试器中?如果您只是谈论log语句,那是因为第一次通过循环时,inputLine不是null,所以控件进入主体并打印出log语句。直到第二次迭代,它才被设置为null,然后控制退出循环并继续下一个语句。。感谢您澄清IT的“Java”,而不是“Java”。哎呀!!是时候编辑我的简历了!!这是“Java”,不是“Java”。哎呀!!是时候编辑我的简历了!!对不起,这不是我的密码吗?或者我看不到区别。区别在于块周围的大括号,你想在
的同时循环
。对不起,这不是我的代码吗?或者我看不到区别。区别在于块周围的大括号,你想在
的同时循环
。所以Servlet用包含JSON字符串的SOP响应我。但是我不能把它放在一个变量中,以后我可以把它分解成变量……@typedef1:你说的“SOP”是什么意思?无论如何,我已经解释了这里出了什么问题——其他人也一样。你实际期望有多少行?如果您只需要一行代码,那将简化工作。对不起,我认为SOP广泛用于System.out。println@typedef1:“日志”会更正常。。。尤其是因为信息是如何记录的并不重要。不管怎样,您希望有多少行,以及如何处理多行?servlet返回的JSON字符串是一个简单的变量,它是通过将整个程序中的不同字符串连接到变量JSONstr而形成的。所以我只希望JSONsstr的输出在一个变量中,问题是Servlet用一个包含JSON字符串的SOP响应我。但是我不能把它放在一个变量中,以后我可以把它分解成变量……@typedef1:你说的“SOP”是什么意思?无论如何,我已经解释了这里出了什么问题——其他人也一样。你实际期望有多少行?如果您只需要一行代码,那将简化工作。对不起,我认为SOP广泛用于System.out。println@typedef1:“日志”会更正常。。。尤其是因为信息是如何记录的并不重要。不管怎样,您希望有多少行,以及如何处理多行?servlet返回的JSON字符串是一个简单的变量,它是通过将整个程序中的不同字符串连接到变量JSONstr而形成的。所以我只希望JSONsstr的输出在一个变量中。