第七章--网络连接和网络数据获取
2016-08-29 17:06
232 查看
讲道理每次最后一周的视频的数量和信息量都好可怕,作业也很有挑战。虽然死乞白赖的向辅导员请假回来,可是直到交作业的最后一天我才把作业写完,现在又马不停蹄的写笔记,所以都不记得视频讲了些啥。这次就以作业为基础说说把。
检查网络状态,首先得先申请权限:
然后以下代码就能判断网络是否连接可用了
在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。
而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。
所以拥抱HttpURLConnection吧。以前在看别人视频的时候,都是讲的HttpClient,然而当时as中就被弃用了,如果一定要用可以在某个地方加一句话,这个网上都有。
HttpURLConnection使用也很简单,传入要访问的URL,设置请求的方法。这里是GET,就是获取信息。还有POST,可能允许修改网络上的资源,比如自己的评论。留存一个链接get/post。
当然前面不要忘记申请访问网络的权限。然后是获取对象的输出流,包装为BfferReader缓冲流,并转换为String格式。
直接用 JSONObject: 对象 ;JSONArray:数组 ;JSONStringer:String对象。这样一层一层的解析。
用开源库,我采用的是google提供的GSON,这个方法好,前提得按照json的结构把实体类写好。写好之后就完美了。
在as中,按照project structure-> dependencies->点击右边的+号->library dependency->输入gson。基本点击第一条选项,然后等他创建完,就可以使用GSON开源库了。
然后就是创建相对应的实体类了,我用过网站和插件,都好,不过个人感觉插件更优,如果结构比较简单,也可以自己写。附上网站链接除了生成实体类还能检查json文本格式的网站。as插件就是GsonfFormat,可以自己选择生成的哪些对象。但是有时候json里命名和我们自己的变量命名有差别,这就要使用到属性重命名 @SerializedName ,如
这样这个变量就会被替换json中为id的字段。然而有时候一个字段有两个不同的名字,如:
这时候 @SerializedName 还有一个格式,这时候mTxt可以被当作txt或txt_d了,具体是谁取决于遇到谁了。
然后就是解析了,fromJson里第一个是需要解析的json文本,String格式,后面是实体类,这样之后json里的字段就和实体类里面的变量和其他类一一对应了。
然后想怎么操作从网络上获取的资源就任我们了。
欢迎指正。
网络连接
网络是否连接
当我们从网上获取数据的时候,首先得有网且可以传递数据(感觉像废话),所以写到半路我就想万一她没联网怎么办(虽然可能性很少),当时我试了下立马就出错闪退。然后老师好像在视频里说过怎么检查网络状态,于是我照着他打出来,一运行又出错,看错误日志,还有在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连接网络获取数据
- 网络连接的判断与封装以及网络获取数据的封装
- Android建立网络连接,利用JSON数据获取百度图片搜索结果及GSON的简单使用
- android 获取网络连接(登陆验证+获取数据)
- C#网络编程之连接oracle数据库获取数据
- Handler进行网络连接获取数据
- 网络连接的判断的封装与 网络获取数据 的封装
- 安卓网络连接全解:包括网络连接状态的监听、网络数据使用状态的监听、获取当前网络连接情况、启动wifi、获取当前连接wifi的网络情况、扫描wifi热点
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十七节 设置TCP连接状态
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第四节 获取当前TCP连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 在vb中使用Iphlpapi.dll获取网络信息 第四章 第三节 实例一:网络数据流量图
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况
- 使用C#调用外部Ping命令获取网络连接情况