#通过网络从服务器获取数据
###01 网络图片查看器(重点)
- 创建Url对象
- 用Url对象打开连接
- 设置请求参数,设置请求方式
- 拿到返回状态 返回码:200成功 3xx重定向 4xx资源错误 5xx服务器错误
- 从连接中获取服务端返回的二进制输入流
- 在清单文件中添加访问互联网的权限
###02 为什么子线程不能修改UI界面?
-
NetworkOnMainThreadException:网络在主线程上的异常;
从Android4.0开始,google为让UI界面运行的更加流程,要求在主线程中不能有访问网络的操作,这样就防止UI界面卡死的现象。 所以通过子线程来访问网络,但子线程不能直接修改UI界面,要通过handler传送消息,请求主线程修改。
-
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
从错误线程调用的异常 只有主线程才能修改UI
-
ANR applicationg not response 应用程序无响应
###03 消息处理机制的原理(重点)
-
原理:如图
-
使用handler的步骤:
1. 在主线程中初始化Handler 2. 在子线程中用handler发送消息 3. android系统处理消息 4. 在Handler的handlemessage()方法中处理消息
-
Handler的工作原理(handler,message,looper三者之间的关系):
在子线程中给主线程发送消息,在Handler的handlmessage()方法中处理消息
###04 网络源码查看器
- 网络请求
- Handler消息机制
###05 消息处理常用的另一个API 这个方法是运行在ui线程 runOnUiThread(new Runnable() { @Override public void run() { // 修改UI界面 textView.setText("更改UI"); } });
###06 新闻客户端
-
从服务器获取xml数据
1. 创建Url对象,用Url对象打开连接 2. 设置请求参数 3. 拿到返回状态 返回码:200成功 3xx重定向 4xx资源错误 5xx服务器错误 4. 从连接中获取流
-
解析XML文件
1. 初始化xml解析器 2. 设置参数和输入流 3. 解析xml文件数据
数据写完了,单元测试一下xml文件的解析
-
把List集合中的数据显示在ListView上
ListView的编写步骤 设置数据适配器adapter 1. 在主线程中初始化Handler 2. 在子线程中用handler发送消息 3. android系统处理消息 4. 在Handler的handlmessage()方法中处理消息
-
显示图片
自定义imageView的步骤 1. 写个SmartImageView继承ImageView,开发网络加载图片的方法 2. 在xml布局中 包名+SmartImageView 3. 在getView方法中调用SmartImageView.setImageUrl()方法
###07 使用SmartImageView显示新闻图片(重点)
- www.github.com 下载开源框架
- 阅读开源框架的介绍 readme.md 或者sample示例代码
- 复制代码到我们的工程中
- 在item.xml中使用smartimageview替换imageview,在代码中使用smartimageview替换 imageview,调用setImageUrl();