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

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

她正在写Android客户端的一个demo,需要实现登录验证功能。截图中可以看到:她写的

conn.setDoOutput(true);

然后写了

conn.setRequestMethod("GET");

就是说用的是GET请求。

因为以前只要跟着视频一起敲,最后的结果一定和她的一致。所以我对这个网站的视频质量从没怀疑过。

我跟着上面的敲完,然后自己在javaEE-Eclipse上搭建tomcat服务器。

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

       我以为大功告成,没想到自己的app点击登录按钮时,并没有接受到服务器返回的数据,我对着logcat看了半天,把错误复制粘贴到百度甚至是Google上去求助,没有相关的详细解释。搞了好几个小时,最终我看到视频截图中的那一行代码:

conn.getResponseCode()==200

心想到底什么意思?

        我百度到这篇文章:知乎:http返回码200的含义,惊讶了,原来还有常说的404,30x,我试着把自己的程序里面的getResponseCode()输出,结果是405,代表着我使用了禁止的访问方式。我再次百度,想看看怎么解决这个405 错误,但是很遗憾没有可行的解决方式。点击登录按钮,服务器仍旧一点反应都没有。

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

       在寝室里我边打游戏,边想那个405错误到底是怎么回事,心里还是放不下。第二天一大早,我习惯性地背起书包,再回创新实验室。 

       没什么好办法,只能暂时放弃视频,到网上去找其他大神的demo。费尽心血,沙里淘金找到了可靠的代码,重新建服务器,写Android布局,改URL。一番折腾,终于在10月4号的晚上,成功了。网址如下:

csdn大神:采用HttpURLConnection


     这时,我终于忍不住去反思,视频里的代码,到底哪里出错了?那个405错误到底是为什么?看截图如下:
 

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

我简要说明:

setDoInput(true),是指客户端(就是我们的app)接受服务器的输入(就是服务的返回值),这个必须为true,因为所有的网络请求都需要接受服务器的响应,不管是get方式,还是POST方式。

setDoOutput()是true还是false,可就是另外一回事了,setDoOutput是指客户端是否需要向服务器发送数据,这里我们为什么要设置成false了?

    其实,我们的url只是网络请求的头部,还可以携带body,这就是POST和GET的区别了。这就意味着客户端要向服务器端输出,所以是Output。现在我们设置setDoOutput(false),就好理解了。我们不需要传请求体(body),就设为false。具体看这个网址吧:csdn:HttpUrlConnection的setDoOutput与setDoInput的区别

那405又是怎么回事了?这篇博客讲的蛮清楚:
用HttpURLConnection复现http响应码405,解释405,感兴趣可以看看。

    我没有把这个视频网站的网址贴出来,是因为他们毕竟让我免费学习了很多android知识,这个过程让我更深刻的理解了服务器,servlet,汉字乱码,http状态码等等,也希望那些做视频的机构,能够对视频质量负责。

----------------2019年5月6日补充:欢迎小白加入qq群:704369440---------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangjin1120

可靠的文章费时费力,希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值