我正在使用相同代码的两个链接进行简单的JSON抓取。我这两次都是这样做的,所以问题的原因并不是因为他们彼此碰到了什么。
这是我的代码:
@Override
protected String doInBackground(Object... params) {
try {
URL weatherUrl = new URL("my url goes here");
HttpURLConnection connection = (HttpURLConnection) weatherUrl
.openConnection();
connection.connect();
responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream);
int contentLength = connection.getContentLength();
char[] charArray = new char[contentLength];
reader.read(charArray);
String responseData = new String(charArray);
Log.v("test", responseData);
当我尝试使用时:
http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full?alt=json
我得到一个错误,即数组长度为-1
对于这个链接:
http://api.openweathermap.org/data/2.5/weather?id=5815135
它返回正常,我得到了所有JSON的日志。有谁知道为什么?
注意:我尝试在调试模式下单步执行代码,但是我无法捕获任何内容。我还下载了一个用于在浏览器中解析json的Google Chrome扩展程序,这两个网址看起来完全有效。我没有想法。
答案 0 :(得分:3)
记录下来:int contentLength = connection.getContentLength();
我没有看到google网址返回content-length
标题。
如果您只想从网址输出字符串,可以使用Scanner
和URL
,如下所示:
Scanner s = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A");
out = s.next();
s.close();
(不要忘记try / finally阻止和异常处理)
更长的方式(允许进度报告等):
String convertStreamToString(InputStream is) throws UnsupportedEncodingException {
BufferedReader reader = new BufferedReader(new
InputStreamReader(is, "UTF-8"));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null)
sb.append(line + "\n");
} catch (IOException e) {
// Handle exception
} finally {
try {
is.close();
} catch (IOException e) {
// Handle exception
}
}
return sb.toString();
}
}
然后调用String response = convertStreamToString(inputStream);