Skip to content

Latest commit

 

History

History
99 lines (72 loc) · 3.06 KB

第四天_网络编程.md

File metadata and controls

99 lines (72 loc) · 3.06 KB

#通过网络从服务器获取数据

#网络通信

###01 网络图片查看器(重点)

  1. 创建Url对象
  2. 用Url对象打开连接
  3. 设置请求参数,设置请求方式
  4. 拿到返回状态 返回码:200成功 3xx重定向 4xx资源错误 5xx服务器错误
  5. 从连接中获取服务端返回的二进制输入流
  6. 在清单文件中添加访问互联网的权限

###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 新闻客户端

  1. 从服务器获取xml数据

     1. 创建Url对象,用Url对象打开连接
     2. 设置请求参数
     3. 拿到返回状态  返回码:200成功  3xx重定向  4xx资源错误  5xx服务器错误
     4. 从连接中获取流
    
  2. 解析XML文件

     1. 初始化xml解析器
     2. 设置参数和输入流
     3. 解析xml文件数据
    

    数据写完了,单元测试一下xml文件的解析

  3. 把List集合中的数据显示在ListView上

     ListView的编写步骤
     	设置数据适配器adapter
     	1. 在主线程中初始化Handler
     	2. 在子线程中用handler发送消息
     	3. android系统处理消息
     	4. 在Handler的handlmessage()方法中处理消息
    
  4. 显示图片

     自定义imageView的步骤
     1. 写个SmartImageView继承ImageView,开发网络加载图片的方法
     2. 在xml布局中  包名+SmartImageView
     3. 在getView方法中调用SmartImageView.setImageUrl()方法
    

#使用开源框架

###07 使用SmartImageView显示新闻图片(重点)

  1. www.github.com 下载开源框架
  2. 阅读开源框架的介绍 readme.md 或者sample示例代码
  3. 复制代码到我们的工程中
  4. 在item.xml中使用smartimageview替换imageview,在代码中使用smartimageview替换 imageview,调用setImageUrl();