我在Android中制作HTTP POST时遇到问题。
当代码读取响应时会出现问题,它无法获取我想要检索的完整网页代码。
我只检索一段网页。
以下是代码:
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("text", "06092010"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response;
response=httpclient.execute(httppost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String s = "";
String line = reader.readLine();
while(line != null){
s += line+"\n";
line = reader.readLine();
}
Log.d("Street", "Result: "+s);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
Log.d("Street", e.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("Street", e.toString());
} catch (Exception e) {
Log.d("Street", e.toString());
}
答案 0 :(得分:0)
所以reader.readLine在到达流的末尾之前返回null?缓冲区末尾是否包含换行符? The docs表示流的结尾不构成“行尾”:
阅读一行文字。一条线被认为是任何一条线终止的 换行符('\ n'),回车符('\ r')或回车符 然后立即换行。
我自己使用这种方法,它有效,但不是一个非常有效的解决方案:
public static String URLToString(URL url) throws IOException {
InputStream in = (InputStream) url.getContent();
int ch;
StringBuffer b = new StringBuffer();
while( ( ch = in.read() ) != -1 ){
b.append( (char)ch );
}
return b.toString();
}
答案 1 :(得分:0)
使用你的代码我得到了相同的结果,但现在我知道了这个问题。
问题不在于代码,是Android LogCat(记录器),我打印结果字符串。在此记录器中,如果字符串太长,则只显示结果的一小部分。
所以问题是android的记录器显示longs字符串的方式
感谢Gaz的帮助!