【问题标题】:HttpUrlConnection cutting inputstream returnedHttpUrlConnection 切割输入流返回
【发布时间】:2014-01-16 19:19:07
【问题描述】:

我正在尝试使用此代码从 Web 服务器获取 inputStrem

private InputStream downloadUrl(String urlString) throws IOException {
 URL url = new URL(urlString);
 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 conn.setReadTimeout(10000 /* milliseconds */);
 conn.setConnectTimeout(15000 /* milliseconds */);
 conn.setRequestMethod("GET");
 conn.setDoInput(true);
 InputStream stream = conn.getInputStream();
 return stream;
}

当我尝试使用这个输入流来获取一个字符串时,我错过了开头和结尾,所以它似乎正在切割一些东西。 但是使用 DefaultHttpClient , HttpGet 和 HttpResponse 结果是好的。

    private String downloadPHP(String urlString){


            String st = null;// aqui el XML descargado

            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(URL);         

            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();
                st = StringUtils.inputStreamToString(content);


            } 
            catch (Exception e) {
                //Log.i(Constants.DEBUG_TAG, e.getMessage());

            }

            return st;
    }

既然 Google 推荐使用 HttpUrlConnection,有什么办法可以解决这个问题吗?

这是从inoutstream中获取字符串的方法

public static String inputStreamToString(final InputStream stream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }
    br.close();
    return sb.toString();
}

【问题讨论】:

  • 我快速测试了您的代码,它似乎工作正常。不过,我把它们都放在同一个函数中。 “错过开头和结尾”是什么意思?
  • 您好,我正在向 Web 服务器发出请求以从数据库中获取一些信息。它应该返回一个 xml 格式的字符串,例如
  • 您好,我正在向 Web 服务器发出请求以从数据库中获取一些信息。它应该在 xml fomrat 中返回一个字符串,包括所有标签等。使用 DefaultHttpClient 一切正常,但使用 HttpUrlConnection 返回的信息已损坏,我缺少第一个标签的一部分(文档中的第一个标签)并且信息被切入中间的某个点
  • 侧节点:真的应该是HttpGet httpGet = new HttpGet(URL);而不是urlString吗?也许你在 downloadPHP 方法中调用了其他东西...

标签: android inputstream httpurlconnection


【解决方案1】:

我们再次检查了代码和服务器端,最后是服务器发送的数据有问题。服务器没有以正确的格式发送数据。我们已经更改了 php 代码,现在使用原始问题中描述的 HttpUrlCONnection 一切正常。 在服务器端,信息没有得到 xml 格式,我们已经使用 PHP DOM 解决了它

【讨论】:

    【解决方案2】:

    尝试下面的代码从输入流中读取。

    byte[] buf;    
    ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
    int read = inputStream.read();
    
    while (read != -1) {
        baos.write((byte) read);
        read = inputStream.read();
    }
    
    baos.flush();
    buf = baos.toByteArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2015-03-19
      相关资源
      最近更新 更多