Android 网络编程(第二十六 二十七节课)

第二十六节课

Handler消息处理首先需要在UI线程创建一个Handler对象,然后在子线程中调用Hanlder的sendMessage()方法,接着这个消息会存放在UI线程的MessageQueue中,通过Looper对象取出MessageQueue中的消息,最后分发回Hanlder的handleMessage()方法中。
AsyncTask
为了方便子线程中对UI进行操作Android提供了一些好用的工具类,AsyncTask就是其中之一。借助AsyncTask,可以十分简单地从子线程切换到主线程,它的原理也是基于异步消息处理机制的。
AsyncTask是一个抽象类,它有三个泛型参数.分别如下所示:- Params:执行异步任务时需要传入的参数,用于后台任务中使用;

  • Progress:后台任务执行时.如果需要在界面上显示当前的进度.则使用该参数作为进度单位;
  • Result:当任务执行完毕后.如果需要对结果进行返回时,则使用该参数作
    为返回值类型;
    第二十七节课
    使用HttpConnection
  1. URL:包含请求地址的类
  • URL(path :包含请求路径的构造方法-operConnectiono:得到连接对象
    2ttnURLConnection:代表与服务器连接的类
    setRequestJethod(“GET/POST ):设置请求方式
    setDoInput(true/false):设置可以读取服务器端返回的数据seTDoOutput(true/false):设置可以向服务器滑写入数据setConnectTimeout(time):设置连接超时时间,单位为mssetReadTimeout (time):设置读取服务器返回致据的时间connecto :连接服务器
  • int getResponseCodeO:得到服务器返回的结果码
    Int getContentLenPtho:得到服务器返回数据的长度(字节)getOutputStreamO:返回一个指向服务器端的数据输出流getInputStreamO:返回一个从服务器端返回的数据输入流disconnecto:断开连接
    Handler消息机制
    ·在使用手机下载软件时.通常都能在界面上看到一个下载的进度条.这个进度条用来表示当前下载的进度。但是Android4.0以后不能在UI线程访问网络,而子线程也不能更新UI界面。为了根据下载进度实时更新UI界面,就需要用到Handler消息机制来实现线程间的通信。
  • Handler机制主要包括四个关键对象。分别是:Message、Handler.MessageQueue、Looper。
    .JSON(JavaScript 0bject Notation)是一种轻量级的数据交换格式·客户端(浏览器端〉与服务器踏交互: xmljson
    ·本质就是具有特定格式的字符串
    JSON数据已经是客户端与服务器端交互的最常用的选择,已经很少使用xml来进行数据交互了
    JSON数据格式
    整体结构: String json1 = “"“id” : 12,“name”:“Tom"Y”;
    String json2 =“[“id”: 12,“name”: “Tom”}), {id” : 12,“name”:“Tom”}";
    Json数组:[]>ArrayList
    Json对象:{}>HashMap
    Json数组的结构: [value1, value2, value3]
    Json对象的结构: fkey1:value1, key2:value2, key3:value3}key的数据类型:字符串
    value的数据类型:
    ·数值(包含整数和小数)·字符串
    .null
    json数组[String jsonArr =“[value1,value2,value3,value4]";“[1,2,3]”
    json对象String jsonObject =“fikey1:value1,key2:value2,key3:value3)”;
    例子:
    [1,“ab",[],i"n":123,“b”:“abc"H[1, “a”:3]“name”:”“TOM”,“age”:12}f“aa":"“a”,[3]}
    JSON数据解析
    ·解析技术:
  • Android原生API:编程相对麻烦.Gson框架:编码简洁,项目首选
    ·解析方向:
    ·服务器端:将java对象(包含集合)转换为json格式字符串·客户端:将json格式字符串转换为java对象(包含集合)
    测试
    -测试解析{}
    “id:2, ““name”:”“大虾””,“price”:12.3,
    “imagePath”":“http://192.168.10.165:8080/L05_Server/images/f1.jpg”
    。测试解析[]
    [
    {
    “id”":1, “name”:“大虾1"”,“price”:12.3,
    “imagePath”":“http://192.168.10.165:8080/f1.jpg”
    },
    {
    “id”":2, “name”":“大虾2"”,“price”:12.5,
    “imagePath”:"“http://192.168.10.165:8080/f2.jpg”
    )
    相关API
    Android原生API:
  • JsonObject类: ison对象{}
    -JSONObject(String ison):将json字符串解析为json对象
    -Xxx getXxx(String name):根据name,在json对象中得到对应的Value-JsonArray类: json数组0
    JSONArray(String ison):将json字符串解析为json数组int length(:得到json数组中元素的个数
    Xxx getXxx(int index):根据下标得到json数组中对应的元素数据
    Gson框架API
    TGson :能解析json数据的类
    Gson():构造对象的方法
    String toJson(Object src):将对象转换为对应格式的json字符串- TfromJson(String json,Type typeofT):解析Json字符串,得到对象- TypeToken:用来得到Type的类
    protected TypeToken():受保存的构造方法Type getType():得到类型对象
    9.1.2 Handler消息机制
    ·使用Handler的一般步骤
    1.创建Handler成员变量对象,并重写其handleMessage()2.在分/主线程创建Message对象
    3.使用handler对象发送Message4.在handleMessage()中处理消息
    **2.1原生APl JSONObject
    sONObject json=new sON0bject(str);string obj=json.getstring("“weatherinfo”");sONObject json2=new sONobject(obj);
    system.out.println(json2.getstringc"“city”"));
    2.2 Gson
    引入类库到工程:创建json对应的对象实休类
    Gson gson=new Gson;
    iweatherinfo w= gson.fromison(str , weatherinfo.c1ass);/类型
    //对象教组
    //Listcweatherinfo> list = gson.from]son(str,new TypeToken<List>().getTypeO;
    2.3 Fastjson
    List list =5ON.parseArray(str , weatherinfo.class);for (iweatherinfo w: 1ist)f
    System.out.printTnC"转换结果=""+w);
    **
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值