day04_网络编程
来源:互联网 发布:守望先锋鼠标宏编程 编辑:程序博客网 时间:2024/06/15 04:55
通过网络从服务器获取数据
文本、图片
网络通信
1 网络图片查看器(重点)
- 写一个URL
- 打开http连接通道
- 设置请求参数
获取响应吗
- 2xx 成功 3xx重定向 4xx客户端错误 5xx服务器错误
获取服务器返回的二进制输入流
- 添加网络权限
2 子线程不能修改UI界面
android.os.NetworkOnMainThreadException
- 网络在主线程异常
- google工程师为了保证界面流畅,在高版本的操作系统里,强制要求网络必须放在子线程中。
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
- 从错误线程调用的异常
- 谁创建,谁修改
- 只能在主线程中修改UI
3 消息处理机制的原理(重点)
原理:如图
编写步骤:
- 在activity中创建Handler
- 在子线程中用handler发消息
- 在handleMessage()方法中处理消息
4 网络源码查看器
/** * 1. 在子线程中发送网络 * 2. 获取网络返回的二进制输入流 * 3. 把流转化成字符串 * 4. 用handler,把字符串显示在textview上 */public void look(View v){ System.out.println("哥哥点击了按钮"); path = etPath.getText().toString().trim(); if (TextUtils.isEmpty(path) || !path.startsWith("http")) { Toast.makeText(this, "哥哥,请输入正确的网址", 0).show(); return; } //开启子线程 new Thread(){ public void run() { reqeustNetWork(); }; }.start();}/** * 请求网络 */protected void reqeustNetWork() { try { // 1. 写一个URL URL url = new URL(path); // 2. 打开http连接通道 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 3. 设置请求参数 conn.setRequestMethod("GET"); conn.setConnectTimeout(3000); // 4. 获取响应吗 // * 2xx 成功 3xx重定向 4xx客户端错误 5xx服务器错误 int code = conn.getResponseCode(); if (200 == code) { // 5. 获取服务器返回的二进制输入流 InputStream is = conn.getInputStream(); //把流转化成字符串 String text = StringUtils.parsseStream2Str(is); //发送消息 Message msg = Message.obtain();//从消息池中获取消息 msg.obj = text; msg.what = MSG_SUCC; mHandler.sendMessage(msg); }else { //响应吗不是200 //发送消息 Message msg = Message.obtain();//从消息池中获取消息 msg.obj = code; msg.what = MSG_ERR_CODE; mHandler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); //发送消息 mHandler.sendEmptyMessage(MSG_ERR); }}Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case MSG_SUCC: tvPage.setText((String)msg.obj); break; case MSG_ERR_CODE : Toast.makeText(MainActivity.this, String.valueOf(msg.obj), 0).show(); break; case MSG_ERR ://异常 Toast.makeText(MainActivity.this, "服务器忙!", 0).show(); break; default: break; } };};
5 消息处理常用的另一个API
runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, text, 0).show(); } });
阶段总结
6 新闻客户端
获取服务器的数据(子线程)
网络通讯
- 写一个URL
- 打开http连接通道
- 设置请求参数
获取响应吗
- 2xx 成功 3xx重定向 4xx客户端错误 5xx服务器错误
获取服务器返回的二进制输入流
- 添加网络权限
- 解析Xml文件
- 创建Xml解析器
- 设置参数
- 解析文件
显示新闻数据
用ListView展示
- 在Xml布局文件中写一个listview
- 在java代码中找到这个控件
- 设置数据适配器
- 用内部类写数据适配器
用Handler修改UI
- 在activity中创建Handler
- 在子线程中用handler发消息
- 在handleMessage()方法中处理消息
显示图片
总结:
cn.itcast.citynews
cn.itcast.citynews.bean 数据实体JavaBean
cn.itcast.citynews.net 网络通讯工具类
cn.itcast.citynews.xml 解析Xml文件
com.loopj.android.image 开源框架
使用开源框架
7 使用SmartImageView显示新闻图片(重点)
应用场景:系统控件无法满足需求
- 在网络上下载开源框架github
- 阅读README或者sample实例代码
阅读全文
0 0
- day04_网络编程
- day04_循环结构_20150804
- day04_装饰器
- day03&day04_初涉JavaScript
- day04_元素案例
- day04_案例五六
- day04_表单提交方式
- 【html】day04_图像和超链接
- 黑马程序员_Java基础Day04_数组(Done)
- DAY04_密文的层层解析
- day04_经典小游戏之“石头、剪刀、布”
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- POJ
- 学习:知识过载与疲于奔命
- Spring AOP的底层实现技术
- L1-027. 出租
- java 之 顺序输入流-SequenceInputStream 将几个文本文件合并
- day04_网络编程
- Linux学习3 :用户及文件权限管理
- 3.时间转换工具类
- 阅读完《第一行代码》后可能还会有的疑问
- 形态学图像处理--matlab
- day05_网络编程
- Python神经网络代码实现流程(三):反向传播与梯度下降
- eclipse切换成英文状态下打字还会报错原因
- Hadoop集群配置(最全面总结)