安卓端与web交互的方式
1. 基础知识
1.1 web基础知识
url:统一资源定位器。
Get方式与Post方式:
http协议中数据传输的两种方式。
其中Get方式传入数据量有限,在url后面直接跟上?与键值对即可,键值对之间用&链接。例如http://192.168.1.154:8080/GPS_SSH/release-json?code=39,199&name=haha。其中参数名需要与后台中规定的参数名一致(大小写敏感)。适合进行查询操作
Post方式因为不会将键值对显示在url中,相对比较安全,提交的数据量也比较大,但是提交方式较为复杂,适合做插入等操作。不做赘述。
Json
一种数据交换格式,由于访问web服务的时候返回的html页面格式较乱且不固定(html标记),不利于解析,所以一般使用json或xml作为数据交换的格式,方便程序中进行相应的解析工作。
1.2 android web基础知识
webview组件
使用内置浏览器来访问网页内容,wekiit内核。
Httpclient类
Apache封装的http访问类,据说效率比较高
HttpURLConnection类
Java自带基础hhtp访问类,通过与IO流缓冲流等配合获取web数据。通过url的openConnection()获取一个实例,调用实例的getInputStream()方法获取一个InputStream对象,web响应的数据就存在该对象中,由于网络的高速性一般构造一个缓冲流来存储InputStream中的数据。
2. 安卓web访问与数据收发
1. 权限
安卓中访问网络需要在AndroidManifest.xml中进行权限的申请,在最后添加<uses-permission android:name="android.permission.INTERNET"> </uses-permission>即可
2. 网络访问与多线程
2.1 主线程中访问网络
安卓4.0后如果在主线程中访问网络,则会报Timeout,NetworkOnMainThreadException错误。主要是因为网络服务往往需要消耗大量时间,而ui线程暂停5s以上就会出现ANR。但是如果是少量的web数据交换可以禁用StrictMode来忽略这个错误。具体代码为
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() //or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects() //探测SQLite数据库操作
.penaltyLog() //打印logcat
.penaltyDeath()