android网络连接使用GET方式请求服务器时的setDoOutput(true)惹的祸

来源:互联网 发布:初榨椰子油 知乎 编辑:程序博客网 时间:2024/06/01 08:04

先耐心看我是怎么一步一步发现问题的,国庆节我打算把Android网路互联搞完。然后盯着视频写代码,这是某网站视频截图如下:

她正在写Android客户端的一个访问demo,实现登录验证功能。而且是用GET方式访问,截图中可以看到:conn.setRequestMethod("GET");,大家可以清楚的看到她写的conn.setOnOutput(true);我对这个网站的视屏质量从没怀疑过,因为以前只要跟着视频一起敲,最后的结果一定和她的一致。

我跟着上面的敲完,然后自己在javaEE-eclipse上搭建服务器,视频上的效果是如果用户名为“zhangsan”并且密码为“123”,服务器就会返回“OK”,否则返回“ERROR”,我并不会搭建服务器,只能一点一点地找,从servlet开始了解,了解URL,了解doGET方法,了解怎么接受并识别数据,终于,最后在浏览器地址栏输入URL是,服务器有了响应。          

       我以为大功告成,结果,自己的app点击登录按钮时,服务器一点反应都没有,我对着logcat看了半天,把错误复制粘贴到百度甚至是Google上,去求助,没有相关的详细解释。最终我看到那一行:conn.getResponseCode()==200,我百度一看,网址是:http://www.zhihu.com/question/20908415,惊讶了,原来还有常说的404,30x,我试着把自己的getResponseCode()输出,结果是405,代表着我使用了禁止的访问方式。我再次百度,想看看怎么解决这个405 错误,但是很遗憾没有可行的解决方式。点击登录按钮,服务器仍旧一点反应都没有。

折腾了好长时间,我都想放弃了,真的感觉自己尽力了,没办法了,本来打算把网络互连学完,就去补java,现在看来得提前结束Android之旅了。下午早早回寝室,感觉彻底解脱了。

       在寝室里我边打游戏,边想那个405错误到底是怎么回事,心里还是放不下。第二天一大早,我习惯性地背起书包,再回实验室。  我没辙了,只能暂时放弃视频,到网上去找其他大声的demo,我费尽心血,沙里淘金找到了可靠的代码,重新建服务器,写Android布局,改URL。一番折腾,终于在10月4号的晚上,成功了。网址如下:

http://blog.csdn.net/redarmy_chen/article/details/26600757
     这时,我终于忍不住去反思,视频里的代码,到底哪里出错了?那个405错误到底是为什么?看截图如下:

大家可以清楚地看到我写的setDoOutput(faule),运行结果是右边的“login success”。两行截然相反的代码,那么这个神秘的setDoOutput到底是什么鬼?

看下面的网址吧:http://blog.csdn.net/u010665691/article/details/45558119。我简要的写一下,

       若使用GET方式,则setdoinput(true),setdooutput(false);

      若使用POST方式,则setdoinput(true),setdooutput(true),切记POST方式setdooutput的默认值是false哦。

当然这个过程也让我更深刻的理解服务器,servlet,汉字乱码,http状态码等等。

0 0
原创粉丝点击