讲讲我学android网络方面遇到的问题:
HTTP 其实是客户端与服务器之间的请求-应答协议,客户端向服务器端提交 HTTP 请求,服务器端向客户端返回响应,其中最常用到的两种方法就是GET和POST请求。
两者最基本的区别:
GET :从指定的资源请求数据
POST: 向指定的资源提交要被处理的数据
注意:
GET方法:查询字符串(键值对)也就是所谓的参数,是放在GET请求的URL中一起发送到服务器端
POST方法:查询字符串(键值对)也就是所谓的参数,是放在POST请求的http正文中,
而不是放在URL中(跟GET请求的最大区别),这样做就比较安全,例如登陆时输入的密码就是采用POST。
例如:http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1
上面这个网址,?隔开的前面就是URL,后面的就是参数(参数中每个键值对用&隔开)。
GET请求就是直接把URL和参数放一起。而POST请求就把ie=utf-8&f=3&rsv_bp=1放在请求正文中
错误解决:
1、http访问,耗时操作都要异步操作创建新的线程,用Asynctask或者handler+Thread都行,
不能在UI主线程做网络操作
2、接下来谈谈困扰我半个月的问题,当我在搞http访问时遇到connection.getinputstream()老是报空指针时,
网上有的说 <uses-sdk android:minSdkVersion="14"/>改成版本7就ok,JDK1.6以上就也会,试了下都不行。
经过调试发现:
java.net.SocketException : socket failed : EACCES (Permission denied)
这个才是错误的根源,当你遇到这个问题是首先先检查下是否有设置网络权限
<uses-permission android:name="android.permission.INTERNET"/>
注意:android studio是有严格区别大小写的!!!
之所以出现上面的问题就是因为把网络权限写成<uses-permission android:name="android.PERMISSION.INTERNET"/>,同时也别拼写错!!
按道理来说,这样就能正常运行了,但是这段时间在网络上还发现如果加了网络访问权限后还是不行的话,再在java文件中网络连接的代码开头加上这行代码:
StrictMode.setThreadPolicy(
new
StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
|
另外推荐下 android学习之路
ps:如果哪里记录错了,恳请指正,谢谢