我正在尝试向应该返回json响应的网站发送http请求。问题是我没有得到json数据。但是当我在浏览器中粘贴网址时,它会显示json输出。我是新手请帮助。
这是我的代码
HttpClient client = new DefaultHttpClient();
String url="http://directclientvendors.com/news24/api/get.php?type=news";
HttpGet request = new HttpGet(url);
HttpResponse response;
response = client.execute(request);
BufferedReader br =
new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line = "";
while(br.ready())
{
line+=br.readLine();
}
System.out.println("line "+line);
答案 0 :(得分:3)
您应该执行GET
请求,而不是POST
。请将请求类型更改为HttpGet
。当您将其粘贴到地址栏并点击回车时,浏览器会在URL上执行GET
。
另外使用Reader + StringBuilder / JsonReader / GSON从URL的响应内容中读取。字符串连接会导致不必要地创建其他对象。
[编辑]
令我惊讶的是,即使在进行POST
调用以获取资源时,API调用仍然有效。问题必须出在解析逻辑中。使用JsonReader
对我来说很好。这只是模板代码,但您可以填写其余内容以获取其他JSON元素。无论POST
是否有效,您仍应使用GET
进行此次通话。
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://directclientvendors.com/news24/api/get.php?type=news");
HttpResponse response = client.execute(request);
InputStream content = response.getEntity().getContent();
JsonReader jsonReader = new JsonReader(new InputStreamReader(content, "UTF-8"));
jsonReader.beginObject();
if(jsonReader.hasNext())
{
System.out.println(jsonReader.nextName()); // prints 'news'
// BEGIN_ARRAY etc to parse the rest
}
// END_OBJECT and cleanup