我正在尝试使用GET请求读取API响应。 URL是在另一个类中创建并传递的字符串。我已经确认正在创建的URL有效并且可以正常工作,但是我的返回值为null。奇怪的是,当我再次拨打电话时,它可以正常工作一次,但是在第一次拨打之后,每隔一次它只会返回null。
这是我传递函数的示例API调用:
我已经对此进行了测试,它返回了浏览器中的期望值。这是返回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;
}
答案 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;