【发布时间】: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