美文网首页AndroidAndroid知识
第七章--网络连接和网络数据获取

第七章--网络连接和网络数据获取

作者: Dddddw | 来源:发表于2016-10-04 15:07 被阅读0次

讲道理每次最后一周的视频的数量和信息量都好可怕,作业也很有挑战。虽然死乞白赖的向辅导员请假回来,可是直到交作业的最后一天我才把作业写完,现在又马不停蹄的写笔记,所以都不记得视频讲了些啥。这次就以作业为基础说说把。

网络连接

网络是否连接

当我们从网上获取数据的时候,首先得有网且可以传递数据(感觉像废话),所以写到半路我就想万一她没联网怎么办(虽然可能性很少),当时我试了下立马就出错闪退。然后老师好像在视频里说过怎么检查网络状态,于是我照着他打出来,一运行又出错,看错误日志,还有在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);

然后想怎么操作从网络上获取的资源就任我们了。


欢迎指正。

相关文章

  • 第七章--网络连接和网络数据获取

    讲道理每次最后一周的视频的数量和信息量都好可怕,作业也很有挑战。虽然死乞白赖的向辅导员请假回来,可是直到交作业的最...

  • iOS 网络资源汇总之网络

    网络相关网络连接图像获取网络聊天网络测试网页框架WebView与WKWebView 网络连接 AFNetworki...

  • iOS网络层设计

    iOS网络层设计 总体思想:提供稳定的数据服务:稳定的网络连接+稳定的数据接口。 稳定的网络连接:网络连接尽量做到...

  • Android常用网络工具类

    判断是否有网络连接 判断WIFI网络是否可用 判断MOBILE网络是否可用 获取当前网络连接的类型信息

  • Android 天气

    具体步骤: 通过LitePal建立City数据库 通过OkHttp建立网络连接,获取API内容 通过GSON解析数...

  • 权限说明

    普通权限 允许程序访问网络连接,可能产生GPRS流量 允许程序获取网络信息状态,如当前的网络连接是否有效 允许程序...

  • 为什么连接宽带时无法上网?

    试着自动获取IP 步骤:控制面板-->网络和Internet-->网络连接 然后找到要连接的网络,右键单击选择属性...

  • Meteor API Server Connections

    这些功能管理和检查Meteor客户端和服务器之间的网络连接。 获取当前的连接状态。 一个被动数据源。 如果当前连接...

  • 一些设计原则

    高层组件与低层组件高层组件,是由其低层组件定义其行为的类,比如:在 Volley 中的网络连接对象的获取:网络连接...

  • 同时连接网线和 Wi-Fi,如何优先使用 Wi-Fi?试试接口跃

    控制面板 > 网络和 Internet > 网络连接 > 网络连接属性 > Internet 协议版本 4 属性 ...

网友评论

    本文标题:第七章--网络连接和网络数据获取

    本文链接:https://www.haomeiwen.com/subject/wpzjyttx.html