Java HTTPResponse返回null

时间:2019-01-15 21:19:21

标签: java rest

我正在尝试使用GET请求读取API响应。 URL是在另一个类中创建并传递的字符串。我已经确认正在创建的URL有效并且可以正常工作,但是我的返回值为null。奇怪的是,当我再次拨打电话时,它可以正常工作一次,但是在第一次拨打之后,每隔一次它只会返回null。

这是我传递函数的示例API调用:

https://api.smmry.com/?SM_API_KEY=key&SM_URL=https://www.thehindubusinessline.com/news/variety/long-way-before-ai-systems-take-over-humans-jobs-study/article25938621.ece

我已经对此进行了测试,它返回了浏览器中的期望值。这是返回null的代码:

public String getResponse(String url)  {
        HttpClient client = null;
        String line = "";
        try {
            client = new DefaultHttpClient();
            HttpGet request;
            request = new HttpGet(url);
            HttpResponse response = client.execute(request);
            //Check if the response code is not 200
            if (response.getStatusLine().getStatusCode() != 200) {
                Logger.error(response.getStatusLine().getStatusCode());
                return "Error";
            }
              BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
              while (rd.readLine() != null) {
                  line = line + rd.readLine();
              }
        } catch (Exception e) {
            Logger.error(e);
        } 
        return line;
    }

2 个答案:

答案 0 :(得分:1)

(?!.*_)

这样做将跳过两行中的一行。 while (rd.readLine() != null) { line = line + rd.readLine(); } 最常见的用法是:

BufferedReader

答案 1 :(得分:0)

请注意,对于循环的每次迭代,将读取rd中的两行。在循环while (rd.readLine() != null)的开始,方法readLine()返回rd中的当前行,并将迭代器标记设置在下一行。然后,当第二次调用readLine()时,rd返回下一行并将其与line的值连接。由于对您的请求的响应只有一行,因此对readLine()的第二次调用返回null,因此该循环将制动,并且该行将返回值null

您应该存储第一次调用readLine()时返回的值,并使用StringBuilder进行连接。

            StringBuilder builder = new StringBuilder();
            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            String line;
            while ((line = rd.readLine()) != null) {
                builder.append(line);
            }
            responseBody = builder.toString();
   .
   .
   .
return responseBody;