Geekband007第七周笔记分享
来源:互联网 发布:剑灵女帝捏脸数据 编辑:程序博客网 时间:2024/06/10 04:40
HttpURLConnection的介绍
一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。 虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使 用和扩展它。继承至URLConnection,抽象类,无法直接实例化对象。通过调用openCollection() 方法获得对象实例
HttpURLConnection的使用步骤
- 创建一个URL对象: URL url = new URL(http://www.baidu.com);
- 调用URL对象的openConnection( )来获取HttpURLConnection对象实例: HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- 设置HTTP请求使用的方法:GET或者POST,或者其他请求方式比如:PUT conn.setRequestMethod(“GET”);
- 设置连接超时,读取超时的毫秒数,以及服务器希望得到的一些消息头 conn.setConnectTimeout(6*1000); conn.setReadTimeout(6 * 1000);
- 调用getInputStream()方法获得服务器返回的输入流,然后输入流进行读取了 InputStream in = conn.getInputStream();
- 最后调用disconnect()方法将HTTP连接关掉 conn.disconnect();
- 有GET自然有POST,我们通过openConnection获取到的HttpURLConnection默认是进行Get请求的, 所以我们使用POST提交数据,应提前设置好相关的参数:conn.setRequestMethod(“POST”); 还有:conn.setDoOutput(true);conn.setDoInput(true);设置允许输入,输出 还有:conn.setUseCaches(false); POST方法不能缓存,要手动设置为false
AsyncTask
Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理。
首先明确Android之所以有Handler和AsyncTask,都是为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的。
Android为了降低这个开发难度,提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。
AsyncTask直接继承于Object类,位置为android.os.AsyncTask。要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个)。
AsyncTask定义了三种泛型类型 Params,Progress和Result。
- Params 启动任务执行的输入参数,比如HTTP请求的URL。
- Progress 后台任务执行的百分比。
- Result 后台执行任务最终返回的结果,比如String。
使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:
- doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
- onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
有必要的话你还得重写以下这三个方法,但不是必须的:
- onProgressUpdate(Progress…) 可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
- onPreExecute() 这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
- onCancelled() 用户调用取消时,要做的操作
使用AsyncTask类,以下是几条必须遵守的准则:
- Task的实例必须在UI thread中创建;
- execute方法必须在UI thread中调用;
- 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法;
- 该task只能被执行一次,否则多次调用时将会出现异常;
XML数据介绍
三种解析XML方法的比较
SAX解析XML数据
DOM解析XML数据
PULL解析XML数据
JSON数据介绍
JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML一样, 广泛被采用的客户端和服务端交互的解决方案!具有良好的可读和便于快速编写的特性。
JSON和XML比较
JSON和XML的数据可读性基本相同;
JSON和XML同样拥有丰富的解析手段
JSON相对于XML来讲,数据的体积小
JSON与JavaScript的交互更加方便
JSON对数据的描述性比XML较差
JSON的速度要远远快于XML
Json的格式规范:
就像协议一样,肯定是有一套规范的,毕竟双方都是通过Json字符串来传递数据,语法规则如下: 数据在名称/值对中;数据由逗号分隔;花括号保存对象;方括号保存数组; 而Json数据的书写格式:名称/值对 比如: “person”:”coder-pig”
Android自带的JSON解析类
JSONObject: Json对象,可以完成Json字符串与Java对象的相互转换
JSONArray: Json数组,可以完成Json字符串与Java集合或对象的相互转换
JSONStringer: Json文本构建类,这个类可以帮助快速和便捷的创建JSON text, 每个JSONStringer实体只能对应创建一个JSON text
JSONTokener:Json解析类
JSONException:Json异常
测试网络连通性
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); boolean isWifiConnection = networkInfo.isConnected(); networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); boolean isMobileConnection = networkInfo.isConnected();
- Geekband007第七周笔记分享
- GeekBand--第七周分享
- 第七周实习笔记:
- GeekBand 第七周笔记
- 第七周Android学习笔记
- geekband android #5 第七周分享(网络编程数据处理)
- 多线程_学习笔记_第七周
- Boolan* C++课程第七周笔记
- 2017大学第七~九周学习笔记
- Geekband002第二周笔记分享
- Geekband003第三周笔记分享
- Geekband005第五周笔记分享
- Geekband006第六周笔记分享
- Geekband008第八周笔记分享
- Geekband009第九周笔记分享
- Geekband010第十周笔记分享
- Geekband012第十二周笔记分享
- Geekband013第十三周笔记分享
- CentOS 7安装配置Redis数据库
- Java:try与finally的说明
- 想追她?先算算你要等多久
- 调整数组顺序使奇数位于偶数前面
- [C++]用变量增长模拟算法运行时间
- Geekband007第七周笔记分享
- 用Python3下载网页图片
- c++中的模板
- TimePickerDialog和DatePickerDialog使用及问题解决
- 292.[LeetCode]Nim Game
- Flume:本地文件到Kafka
- Mybatis学习记录(三)--Mybatis配置文件详解
- activity与fragment通信汇总
- HDU 4622 Reincarnation 后缀自动机