第七章--网络连接和网络数据获取
来源:互联网 发布:电脑版淘宝找不到仓库 编辑:程序博客网 时间:2024/06/05 20:16
讲道理每次最后一周的视频的数量和信息量都好可怕,作业也很有挑战。虽然死乞白赖的向辅导员请假回来,可是直到交作业的最后一天我才把作业写完,现在又马不停蹄的写笔记,所以都不记得视频讲了些啥。这次就以作业为基础说说把。
网络连接
网络是否连接
当我们从网上获取数据的时候,首先得有网且可以传递数据(感觉像废话),所以写到半路我就想万一她没联网怎么办(虽然可能性很少),当时我试了下立马就出错闪退。然后老师好像在视频里说过怎么检查网络状态,于是我照着他打出来,一运行又出错,看错误日志,还有在ManiFest中申请权限,这个老师讲过?可能我没认真听。
检查网络状态,首先得先申请权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
然后以下代码就能判断网络是否连接可用了
//首先判断网络是否连接,第一次使用的时候需要连接网络ConnectivityManager mConnectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();if (mNetworkInfo == null || !mNetworkInfo.isAvailable()){//这里是网络没有连接}else { //这里是网络连接了的 }
连接网络
HttpClient已经被google弃用了,来看看郭霖前辈的一席话:
在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。
而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。
所以拥抱HttpURLConnection吧。以前在看别人视频的时候,都是讲的HttpClient,然而当时as中就被弃用了,如果一定要用可以在某个地方加一句话,这个网上都有。
HttpURLConnection使用也很简单,传入要访问的URL,设置请求的方法。这里是GET,就是获取信息。还有POST,可能允许修改网络上的资源,比如自己的评论。留存一个链接get/post。
URL url = new URL(urlString); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(30000); connection.connect(); int responseCode = connection.getResponseCode(); if (responseCode != HttpURLConnection.HTTP_OK){ return null; }
当然前面不要忘记申请访问网络的权限。然后是获取对象的输出流,包装为BfferReader缓冲流,并转换为String格式。
BufferedReader bufferedReader;StringBuilder stringBuilder = new StringBuilder();InputStream inputStream = connection.getInputStream();bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));String line;if ((line = bufferedReader.readLine()) != null){ stringBuilder.append(line); stringBuilder.append("\r\n");}bufferedReader.close();line = stringBuilder.toString();return line;
解析JSON
JSON格式的文本比xml更轻量,解析也很方便。得到网络上的资源后就是怎么解析json的问题了,有N种方法。
- 直接用 JSONObject: 对象 ;JSONArray:数组 ;JSONStringer:String对象。这样一层一层的解析。
- 用开源库,我采用的是google提供的GSON,这个方法好,前提得按照json的结构把实体类写好。写好之后就完美了。
- 在as中,按照project structure-> dependencies->点击右边的+号->library dependency->输入gson。基本点击第一条选项,然后等他创建完,就可以使用GSON开源库了。
- 然后就是创建相对应的实体类了,我用过网站和插件,都好,不过个人感觉插件更优,如果结构比较简单,也可以自己写。附上网站链接除了生成实体类还能检查json文本格式的网站。as插件就是GsonfFormat,可以自己选择生成的哪些对象。但是有时候json里命名和我们自己的变量命名有差别,这就要使用到属性重命名 @SerializedName ,如
@SerializedName("id")private String mCityId;
这样这个变量就会被替换json中为id的字段。然而有时候一个字段有两个不同的名字,如:
"cond":{"txt":"多云"}"cond":{"txt_d":"晴"}
这时候 @SerializedName 还有一个格式,这时候mTxt可以被当作txt或txt_d了,具体是谁取决于遇到谁了。
@SerializedName(value = "txt", alternate = {"txt_d"})public String mTxt;
然后就是解析了,fromJson里第一个是需要解析的json文本,String格式,后面是实体类,这样之后json里的字段就和实体类里面的变量和其他类一一对应了。
Gson gson = new Gson();CityRoot cityRoot = gson.fromJson(resultCity, CityRoot.class);
然后想怎么操作从网络上获取的资源就任我们了。
欢迎指正。
- 第七章--网络连接和网络数据获取
- 简单网络数据获取与连接判断
- Android-HttpClient连接网络获取数据
- Handler进行网络连接获取数据
- 判断网络连接状态和获取网络接入点
- WindowsAPI获取主机网络配置和网络连接信息
- android 获取网络连接(登陆验证+获取数据)
- 获取网络连接信息
- 获取网络连接状态
- 获取网络判断和数据进行封装
- 获取网络数据(Json串和图片)
- 网络数据连接数据库
- C#网络编程之连接oracle数据库获取数据
- 获取网络数据
- 获取网络数据
- 获取网络数据
- 网络交互,获取数据
- 网络数据获取
- Universal-Image-Loader源码阅读(29)-SimpleBitmapDisplayer
- 【入门教程之七】 玩转源代码:生成工程解决方案与源码编译
- 算法的基本概念及特性(有穷性、确定性、可行性、输入和输出)
- LeetCode : 136. Single Number
- tomcat学习
- 第七章--网络连接和网络数据获取
- 手把手教你建github技术博客by hexo
- node.js配置
- 终于推开那扇门
- mybaits generator 重复生成xml
- [转]【坐在马桶上看算法】算法3:最常用的排序——快速排序--作者:ahalei
- 机房收费系统—结账
- Universal-Image-Loader源码阅读(30)-CircleBitmapDisplayer
- java学习笔记