2018.1.3
1、回顾线程、handler
【案例】
项目结构
activity_main.xml
MainActivity.java
测试:
2、如何进行网络访问?
android开发框架访问网络主要依赖:
(1)java.net包针对网络访问
(2)java.io包针对数据访问(输入和输出)
(3)java.nio包用于数据访问(输入和输出)
(4)org.apache包中包含很多有关http访问的方法
(5)android.net包对java.net包进一步的封装
(6)android.telephony.gsm包用于发送和管理sms消息。
具体的来说:在android studio下推荐的网络访问是
(1)HttpURLConnection对象
(2)Volley框架
3、使用HttpURLConnection对象来访问网络
api:
(1)int getResponseCode()获取服务器响应的状态码
(2)String getResponseMessage()获取服务器响应的消息
(3)String getRequestMethod() 获取请求的方式
(4)void setRequestMethod()设置请求的方式
【说明】
(1)服务器如何访问
(2)请求的方式,对于客户端来说,请求有两种方式get和post
get直接向服务器发送字符串,类似于在浏览器的地址栏中输入字符发送给服务器;
post对请求信息进行编码,编码后发送给服务器。
不同的请求方式,需要服务器对应处理。也就是说get方式发送的请求,服务器需要响应get方式;post方式请求,需要服务器响应post方式请求。
在网页中:
<form action=”*” method=”get|post”></form>
通常直接访问一个图片信息,就是一个get方式的请求。(因为只发送了一个链接,而没有发送额外的请求信息)
【案例】使用HttpURLConnection获取网络中的图片
(1)界面上有一个EditText,用于保存网络url;有一个button用于执行网络请求;有一个imageview用于显示网络下载下来的图片。
(2)在MainActivity中,初始化这些UI控件,且设置Button的事件
(3)由于需要访问网络,android要求网络访问必须放入子线程中。所以需要定义一个子线程。需要在run方法中实现网络访问。
(4)使用HttpURLConnection来访问网络:
4.1 创建一个URL对象,用于表示访问什么地址?
4.2使用URL对象来创建一个HttpURLConnection对象
4.3设置请求的相关配置
4.4执行请求通过HttpURLConnection对象的getResponseCode()执行请求
4.5如果服务器返回的是200,表示是一个正确的响应。
4.6获取图片
4.7图片有了,需要发送给UI线程,需要定义一个Handler对象
(5)定义一个Handler对象
4.8使用handler的sendMessage方法发送图片
(6)在handler对象的handleMessage方法中处理收到的消息
6.1还原图片
6.2将图片显示到UI上
(7)由于访问网络需要设定权限,
7.1androidManifest.xml文件中设置网络访问权限
7.2高版本的android系统需要设置动态权限
项目结构:
activity_main.xml
MainActivity.java
androidManifest.xml
效果: