OkHttp / Android不会返回完整的结果

时间:2016-05-28 08:02:14

标签: android okhttp3

我有以下代码,它希望返回从http://developer.android.com加载的整个html文件内容。

(代码在Xtend中,但我认为无所谓)。

var html = try {
        var client = new OkHttpClient()
        var request = new Request.Builder()
                        .url("http://developer.android.com/")
                        .build()
        var response = client.newCall(request).execute()

        response.body.string
    } catch(IOException err) {
        e("HTML error", err.toString)
        return
    }

    Log.d("HTML", html)

几行html后,输出被切断了。

<!DOCTYPE html>
<html lang="en">
<head>




<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta name="description" content="The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.">
<meta name="xsrf_token" content="A3XCSylWU7AR4OhsL_yhMWlzbNcbh9Hk3Csw0HAUa5E6MTQ2NDQyMTgwNzE1MDQ0MA" />

<link rel="alternate" href="http://developer.android.com/index.html" hreflang="en">
<link rel="alternate" href="http://developer.android.com/index.html?hl=es" hreflang="es">
<link rel="alternate" href="http://developer.android.com/index.html?hl=id" hreflang="id">
<link rel="alternate" href="http://developer.android.com/index.html?hl=ja" hreflang="ja">
<link rel="alternate" href="http://developer.android.com/index.html?hl=ko" hreflang="ko">
<link rel="alternate" href="http://developer.android.com/index.html?hl=pt-br" hreflang="pt-br">
<link rel="alternate" href="http://developer.android.com/index.html?hl=ru" hreflang="ru">
<link rel="alternate" href="http://developer.android.com/index.html?hl=vi" hreflang="vi">
<link rel="alternate" href="http://developer.android.com/index.html?hl=zh-cn" hreflang="zh-cn">
<link rel="alternate" href="http://developer.android.com/index.html?hl=zh-tw" hreflang="zh-tw">

<title>

  Android Developers

</title>

<!-- STYLESHEETS -->
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto+Condensed">
<link rel="stylesheet"
    href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
    title="roboto">





<link href="/static/css/default.css?v=2016052807" rel="stylesheet" type="text/css">
<!-- JAVASCRIPT -->
<script src="//www.google.com/jsapi" type="text/javascript"></script>
<script src="https://developer.android.com/_static/23ecca3dc9/js/android_3p-bundle.js" type="text/javascript"></script>


<script type="text/javascript">
  var toRoot = '/';
  var metaTags = ""; 
  var devsite = true;
  var useUpdatedTemplates = true;
  var devsiteLang = 'en';
  var pageType = 'none';
  var ANDROID_LANGUAGES = [


      'en','es','in','ja','ko','pt-br','ru','vi','zh-cn','zh-tw'

  ];
</script>
<script src="/static/js/docs.js?v=2016052807" type="text/javascript"></script>


<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-5831155-1', 'android.com');
  ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'});  // New tracker);
  ga('send', 'pageview');
  ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>


</head>

<body class="gc-documentation none None full-width" itemscope itemtype="http://schema.org/Article">
  <a href="#top" id="skip-to-main">Skip to content</a>
  <header id="header-wrapper">
    <div class="dac-header" id="header">
      <div class="dac-header-inner">
        <a class="dac-nav-toggle" data-dac-toggle-nav href="" title="Open navigation">
          <span class="dac-nav-hamburger">
            <span class="dac-nav-hamburger-top"></span>
            <span class="dac-nav-hamburger-mid"></span>
            <span class="dac-nav-hamburger-bot"></span>
          </span>
        </a>

        <a class="dac-header-logo" href="https://developer.android.com/index.html">
          <img class="dac-header-logo-image" src="https://developer.android.com/static/images/android_logo.png"
              srcset="https://developer.android.com/static/images/android_logo_2x.png 2x"
              width="32" height="36" alt="Android"> Developers</a>
        <ul class="dac-header-tabs">
          <li>
            <a class="dac-header

我也试过使用UrlConnection,但结果并没有什么不同。这是在实际设备(三星Galaxy Note 10.1运行非官方Cyanogen Mod)和AVD(Atom x64与Android 6.0)上测试的。

我也试过了一些网址,但结果却完全相同(响应在某处被切断)。

我真的不知道接下来该怎么做。你能建议吗?

3 个答案:

答案 0 :(得分:0)

在浏览器中实际加载页面后,一些数据加载了javaScript)下载javaScripts并对其进行分析)

答案 1 :(得分:0)

试试这个:

public static String readResponseBody(Response response) throws IOException {
    BufferedReader reader = new BufferedReader(response.body().charStream());;
    StringBuilder stringBuilder = new StringBuilder();
    while (true) {
        String line = reader.readLine();
        if (line == null)
            break;
        stringBuilder.append(line);
    }
    return stringBuilder.toString();
}

答案 2 :(得分:0)

向每位参与者道歉。似乎图书馆/平台按预期工作。问题可能在于DDMS。

我已经尝试阅读整个html,然后在DDMS上显示最后几个字符(使用Log类),结果显示它是html </html>的结束标记。我很确定结果会整体回归。

但是如果我将整个字符串放入日志函数中,那么它会被大约4000个字符切掉。可能是adb缓冲区限制或其他。