我在我的PC(Windows 7 64位,Eclipse,Java)和Android虚拟机上运行SAME代码,我得到了不同的结果。
它是一个小程序,可以完全以字符串形式打印HttpResponse。
PC上的结果:
HTTP / 1.1 405方法不允许[允许:GET,HEAD,日期:星期四,2011年11月3日17:57:22 GMT,Content-Type:text / html; charset = UTF-8,服务器:gws,内容长度:11816,X-XSS-Protection:1; mode = block,X-Frame-Options:SAMEORIGIN]
Android上的结果:
org.apache.http.message.BasicHttpResponse@44ec9da8
我在PC上运行的代码是:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://www.google.com");
try {
HttpResponse response = httpclient.execute(httppost);
System.out.println(response.toString());
在Android上:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://www.google.com");
try {
HttpResponse response = httpclient.execute(httppost);
return response.toString();
我要求因为我写了一个可以在PC上运行的应用程序 - 使用HttpResponse内容 - 但是在Android上似乎根本就没有内容......
有人可以解释一下这个吗?或者告诉我如何在android上将响应内容(标题)作为String?
答案 0 :(得分:2)
这是因为HttpResponse.toString()在Android和PC上的实现方式不同(不同的jvm和框架组件实现!)。为了正确获取HttpHeaders,我猜你需要使用类似的东西:
http://developer.android.com/reference/org/apache/http/HttpMessage.html#getAllHeaders%28%29
无论如何,请参阅javadoc以供参考。
答案 1 :(得分:2)
您实际上并没有运行相同的代码。
Android's BasicHttpResponse
目前根本没有toString()
方法,并继续调用java.lang.Object.toString()
给您fully.qualified.class.name@hashcode
。
您的桌面版HttpClient很可能有一个与此from HttpClient 4.1.3类似的toString():
public String toString() {
return this.statusline + " " + this.headergroup;
}
使用toString()
进行任何非调试/日志记录不是一种好习惯 - 您应该使用实际的get方法提取正确的信息,或者只返回HttpResponse
本身。