从一个链接获取JSON,而不是从另一个链接

时间:2013-07-31 23:39:26

标签: java android json

我正在使用相同代码的两个链接进行简单的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扩展程序,这两个网址看起来完全有效。我没有想法。

1 个答案:

答案 0 :(得分:3)

记录下来:int contentLength = connection.getContentLength();

我没有看到google网址返回content-length标题。

如果您只想从网址输出字符串,可以使用ScannerURL,如下所示:

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);