1 简介

本文简单介绍android 开发中常用的webview 、url、 volley、 json解析等网络工具。由于篇幅问题,这里只做简单介绍并不做详解。

2 WebView的用法

2.1 简单使用

在布局文件中添加webview:

<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/webview"android:layout_width="fill_parent"android:layout_height="fill_parent"/>

加载数据:

WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.baidu.com");

在menifest中添加请求网络权限:

<manifest ... ><uses-permission android:name="android.permission.INTERNET"/>
</manifest>

2.2 在webview中使用JavaScript

在webview中默认javaScript是不支持的,如果你的网页使用javaScript需要设置。

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

2.3 javaScrip调用java

当你嫌弃网页的alert太丑了!你想换成android中自定义的dialog如何做呢?步骤如下:
第一步:javaScript中调用java代码

<!DOCTYPE >
<html >
<head><script type="text/javascript">function init(testVal){AndroidFunction.showToast(testVal);}</script>
</head>
<body><input type="button" value="Say hello" onClick="javascript:return init('Hello Android!')" />
</body>
</html>

第二步:编写接口类:

public class WebAppInterface {Context mContext;/** Instantiate the interface and set the context */WebAppInterface(Context c) {mContext = c;}/** Show a toast from the web page */@JavascriptInterfacepublic void showToast(String toast) {Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();}
}

第三步调用代码如下:

 webView = (WebView) findViewById(R.id.webView);WebSettings webSettings = webView.getSettings();webSettings.setJavaScriptEnabled(true);webView.addJavascriptInterface(new WebAppInterface(this), "AndroidFunction");webView.loadUrl("file:///android_asset/web.html");

注意:
java中的方法必须标注:“@JavascriptInterface”。
targetSdkVersion必须设置为17或更高。

2.4 设置页面导航

当点击网页中的button,如果你想转到自己的url页面。你需要给webview添加setWebViewClient(). 代码如下:

 webView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if (url.equals("www.example.com")) {return false;}Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));startActivity(intent);return true;}
});

2.5 跳转web历史页

方法 介绍
goBack()
goForward()
canGoForward() 是否能goForward
canGoBack 是否能goBack

方法我就不介绍了大家看看名字就明白了,我就不介绍了,怕把大家弄糊涂了。

2.6 小结

好了,webview就先简单介绍到这里,以后再补充。

3 使用HTTP协议访问网络

这块讲起来就说来话长了,这里就简单讲一下url简单使用。

3.1 URLConnection和URL

URL url = new URL(Constant.url);
HttpURLConnection coon = (HttpURLConnection) url.openConnection();
BufferedInputStream bis = new BufferedInputStream(coon.getInputStream());
...
coon可以设置很多属性。
...

coon可以设置很多属性,请参考这位大神的文章。

4 Volley的简单使用

4.1 Volley简介

Url和HttpURLConnection的用法是比较复杂的,如果不进行适当封装的话,很容易就会写出不少重复代码。于是android三界各路大神纷纷给出很多网络框架,这里我们给出一个轻量级网络框架Volley。Volley网络框架是2013年Google I/O大会上推出的。

4.2 volley使用场景

volley适用网络频繁,请求的数据量不大的情况。但是不适合大数据请求,如:文件下载。

4.3 volley使用步骤

1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。

4.4 StringRequest的用法

volley用起来非常简单,我们先讲使用,后面我们对其二次封装。
步骤如下:

步骤1:首先需要获取到一个RequestQueue对象:

RequestQueue mQueue = Volley.newRequestQueue(context);  

注意 这里拿到的RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。RequestQueue内部的设计就是非常合适高并发的,因此我们不必为每一次HTTP请求都创建一个RequestQueue对象,这是非常浪费资源的,整个应用一个RequestQueue就行。

步骤2:创建StringRequest对象

StringRequest stringRequest = new StringRequest("http://www.baidu.com",  new Response.Listener<String>() {  @Override  public void onResponse(String response) {  Log.d("TAG", response);  }  }, new Response.ErrorListener() {  @Override  public void onErrorResponse(VolleyError error) {  Log.e("TAG", error.getMessage(), error);  }  });  

StringRequest的构造函数需要传入三个参数:

第一个参数就是目标服务器的URL地址
第二个参数是服务器响应成功的回调
第三个参数是服务器响应失败的回调。

我们在成功回调和失败回调分别打印一条信息。
步骤3 将这个StringRequest对象添加到RequestQueue

mQueue.add(stringRequest);  

步骤4 效果图如下:
好了,使用就是这么简单。没错,我们把百度的html给打印出来了。

小结
我们再来总结一下volley的使用步骤:

1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。

虽然简单,但是我们还要对其进行2次封装。

4.4 Volley封装

有一点大家一定要切记:

第三方框架一定要进行二次封装!!!
第三方框架一定要进行二次封装!!!
第三方框架一定要进行二次封装!!!

重要的话说3遍!即使框架使用再简单也要封装,为什么呢?

第一、第三方框架有不符合我们应用的地方。
第二、以防后面我们更换别的技术。

封装代码如下:

public class VolleyNetWorkUtils {/*** 2016年3月19日15:22:10* @author J_X*  Volley运行应答返回结果的监听接口*/public interface VolleyResponseListener {/**设置当前网络请求结果*/void onResponse(String result, int flag);void onErrorResponse(VolleyError error);}/*** 网络请求链接*/private String requestUrl;/*** 网络请求参数*/private Map<String, String> paramsMap;/*** 网络请求Header设置*/private Map<String, String> headerMap;/*** 上下文资源引用*/private Context context;/*** 网络请求的TAG标示(主要用来取消网络请求)*/private String requestTag;/*** 网络请求应答结果的回调*/private VolleyResponseListener responseListener;/*** 网络请求方式POST\PUT\DELETE\GET\DEPRECATED_GET_OR_POST*/private int requestMethod = Method.POST;private int flag;private int outTime = -1;public VolleyNetWorkUtils(final Context c, final String url,int flag) {// TODO Auto-generated constructor stubthis.context = c;this.requestUrl = url;this.flag  = flag;}//设置请求地址public void setRequestUrl(String requestUrl) {this.requestUrl = requestUrl;}//设置flagpublic void setFlag(int flag) {this.flag = flag;}/*** 设置网络请求监听* */public void setResponseListener(VolleyResponseListener listener) {this.responseListener = listener;}/*** 发送网络请求返回操作结果*/public void getNetworkJsonString() {StringRequest stringRequest = new StringRequest(this.requestMethod,this.requestUrl, new Response.Listener<String>() {@Overridepublic void onResponse(String result) {responseListener.onResponse(result,flag);}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {responseListener.onErrorResponse(error);}}) {// 传递参数@Overrideprotected Map<String, String> getParams() throws AuthFailureError {if (paramsMap != null) {return paramsMap;}return super.getParams();}@Overridepublic Map<String, String> getHeaders() throws AuthFailureError {// TODO Auto-generated method stubif (headerMap != null) {return headerMap;}return super.getHeaders();}};// 设置网络请求标示if (!TextUtils.isEmpty(requestTag)) {stringRequest.setTag(stringRequest);}if(outTime > 0){stringRequest.setRetryPolicy(new DefaultRetryPolicy(outTime,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));}// 将网络请求添加到请求队列中SingleRequestQueue.getRequestQueue(context).add(stringRequest);}/*** 设置网络请求参数,针对需要传递参数的请求方式,例如:POST方式提供* * @param paramsMap*/public void setParamsMap(Map<String, String> paramsMap) {this.paramsMap = paramsMap;}public void cancelRequst(String tag){SingleRequestQueue.getRequestQueue(context).cancelAll(tag);}/*** 对Http header有特殊要求的设置Header* * @param headerMap*/public void setHeaderMap(Map<String, String> headerMap) {this.headerMap = headerMap;}/*** 设置网络请求线程的标示,便于后期对线程进行操作* * @param requestTag*/public void setRequestTag(String requestTag) {this.requestTag = requestTag;}/*** 设置网络请求的方式:POST\PUT\DELETE\GET\DEPRECATED_GET_OR_POST* * @param requestMethod*/public void setRequestMethod(int requestMethod) {this.requestMethod = requestMethod;}public void setOutTime(int outTime) {this.outTime = outTime;}}

使用方法如下:
第一、activity实现VolleyNetWorkUtils.VolleyResponseListener接口
第二、使用代码如下:

String meetingListUrl = "http://www.baidu.com";
VolleyNetWorkUtils volleyNetWorkUtils = new VolleyNetWorkUtils(MeetingActivity.this, meetingListUrl,GetMeetingListFlag);HashMap<String, String> params = new HashMap<String, String>();params.put("app_key", getKey());volleyNetWorkUtils.setParamsMap(params);//设置参数volleyNetWorkUtils.setResponseListener(this);//设置回调volleyNetWorkUtils.getNetworkJsonString();//开始请求数据

是不是使用起来非常简单。

5 Json解析

json解析是最常用的东西,必须要掌握。这里我们针对3种格式给出解析方法,并在最后用Gson都大家自动解析。

5.1 Json家族常用的类

android的json解析部分都在包org.json下,主要有以下几个类:
JSONObject类:

JSONArray类:

5.2 解析方法讲解

1. { ,,,,}键值方式

{"class_id": "1","class_name": "小区美食","class_image":"http://yx.gyp.com/data/upload/o2o/merchant_class/04914995980469188.png"
}

类似于这种的格式如何解析呢?解析代码如下:

 try {JSONObject  jo = new JSONObject(Jsonstr);String class_id = jo.optString("class_id");String class_name = jo.optString("class_name");String class_image = jo.optString("class_image");} catch (JSONException e) {e.printStackTrace();}

2 { [{,,},{,,}]} 数组方式

{"store_class": [{"class_id": "1","class_name": "小区美食","class_image": "http://yx.gyp.com/data/upload/o2o/merchant_class/04914995980469188.png"},{"class_id": "2","class_name": "便利店","class_image": "http://yx.gyp.com/data/upload/o2o/merchant_class/04913371801531952.png"}]
}

这种是列表的解析,代码如下:

 try {JSONObject jo = new JSONObject(jsonStr);JSONArray store_classJsonArray = jo.optJSONArray("store_class");for(int i = 0; i < store_classJsonArray.length(); i++){JSONObject store_classJo = store_classJsonArray.optJSONObject(i);String class_id = store_classJo.optString("class_id");String class_name = store_classJo.optString("class_name");String class_image = store_classJo.optString("class_image");}} catch (JSONException e) {e.printStackTrace();}

3 {[,,,,]}直接一个数组

 {"store_class": ["小区美食","便利店",]}

这个是数组的字符串,解析如下:

 try {JSONObject jo = new JSONObject(jsonStr);JSONArray store_classJsonArray = jo.optJSONArray("store_class");for(int i = 0; i < store_classJsonArray.length(); i++){String  str = store_classJsonArray.optString(i);}} catch (JSONException e) {e.printStackTrace();}

4 特殊情况的解析
上面的解析的3种情况有一个共同点:key是不变的。但是如果key和value都变的话就不好解析了,我特别把这种情况摘出来。

 {"space":{"质量":"1kg","颜色":"黄色","长度":"1米",}}

这种显示规格的json字符串典型的key和value都在变的情况。解析如下:

 JSONObject jo = new JSONObject("");Iterator<String> iterator =  jo.keys();while(iterator.hasNext()){String key = iterator.next();String value = jo.optString(key);}

5.3 GsonFormat快速实现实体类解析

GsonFormat是AndroidStudio的一个插件,需要安装。

安装:

安装成功后,新建一个类,按Alt + Insert 键出现下面图:

点击GsonFormat后出现下面界面:

粘贴上json字符串后,点击OK:

最后就自动解析好了,真是太方便了!自动有了这个玩意我再也没自己解析过!

6 图片加载

图片加载当前有经有成熟的框架了,已经不需要我们自己写了。介绍一下当前流行的图片加载框架:

名称 适应情况
Picasso 体积会小很多,适应于小应用
Glide 处理大型的图片流,比如gif、Video,做美拍、爱拍这种视频类应用
Fresco 内存优化非常好,但是体积大
Universal-Image-Loader 停止维护了,不建议使用

这里我们着重介绍一下Picasso的使用:
添加包:

compile 'com.squareup.picasso:picasso:2.5.2'

使用起来非常简单:

 Picasso.with(context).load(url)//图片地址.resize(50, 50)//图片大小.centerCrop()//图片展示类型.into(imageView);//设置进图片
 Picasso.with(context).load(url)//图片地址.resize(50, 50)//图片大小.centerCrop()//图片展示类型.into(imageView);//设置进图片

详细使用我们参考这篇文章

7 结尾

好了,就介绍到这里吧,本篇只是抛砖引玉的做简单的介绍,很多地方没有详细展开,希望对大家有所帮助。如果觉的不错请点个赞吧。

在技术上我依旧是个小渣渣,加油!勉励自己!

8 参考文档

【1】官网
【2】android webView 的WebSettings说明
【3】Android中HttpURLConnection使用详解
【4】 Android Volley完全解析
【5】picasso-强大的Android图片下载缓存库

android 网络篇简单介绍相关推荐

  1. iOS开发UI篇—简单介绍静态单元格的使用

    iOS开发UI篇-简单介绍静态单元格的使用 一.实现效果与说明 说明:观察上面的展示效果,可以发现整个界面是由一个tableview来展示的,上面的数据都是固定的,且几乎不会改变. 要完成上面的效果, ...

  2. 公司网络架构简单介绍

    公司网络架构简单介绍 公司服务器架构简单介绍: CDN:租用的,用于提高用户访问速度 前边两台LVS:实现负载均衡和高可用 三台Nginx服务器提供Web服务 三台Tomcat服务器当动态Web服务 ...

  3. (一)Ns3网络仿真软件简单介绍

    (一)Ns3网络仿真软件简单介绍 1.  什么是NS-3? NS是一个开源离散事件驱动网络模拟器.官方定义:(fromhttp://www.nsnam.org/) ns-3 is a discrete ...

  4. Android网络篇

    http://blog.csdn.net/u011014707/article/details/46584347 针对互联网设计的操作系统,网络编程.多媒体编程.基础框架构成了Android平台应用开 ...

  5. [深度学习-原理]GAN(生成对抗网络)的简单介绍

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之DCGAN基于CIFAR10数据集的例子 深度学习GAN(三)之DCGAN基于手写体Mnist数据集的例子 深度学习GAN(四)之c ...

  6. Android逆向工具简单介绍

    目录 一.Android逆向概述 1.什么是Android逆向 2.逆向过程 3.逆向用途 1)APP自动化执行程序脚本 2)修改APP的功能 3)APP安全 二.常用逆向工具介绍 1.APP抓包工具 ...

  7. Android事件分发简单介绍

    简单的讨论下关于Android的事件分发,其实网上的介绍很多,但是每次看完我都记的很晕,而我也只想知道当不同的返回值事件走的流程,所以这也只为自己做个简单的记录 首先说一下关于事件分发ViewGrou ...

  8. Android IBinder机制简单介绍

    原理简介 我们都知道android 是通过IBinder来实现IPC(Inter Process Communication)进程间通信的... 参考:Android进程间通信(IPC)机制Binde ...

  9. Docker网络模式简单介绍

    1 简介 docker常见的网络模式有5种,分别为 bridge:Docker中默认的网络驱动模型,在启动容器时如果不指定则默认为此驱动类型: host:打破Docker容器与宿主机之间的网络隔离,直 ...

最新文章

  1. XCode 导入头文件不提示解决
  2. UITableView的cell向左滑出有删除,修改等选项
  3. python中import os_python import os
  4. 居家洁士扫地机器人_掌握核心技术扫地机器人品牌推荐,由利和石头扫地机器人哪个牌子好?...
  5. 光模块是怎么分类的?光模块的应用及作用有哪些?
  6. c构造函数和析构函数_C ++构造函数和析构函数| 查找输出程序| 套装3
  7. Null对象模式的用法
  8. 杭电1710 (已知二叉树前中序 求后序)
  9. Spring事务管理(注解式声明事务管理)备忘
  10. 今日恐慌与贪婪指数为83 贪婪程度大幅上升
  11. 阿里云nginx站点http升级https
  12. 通过哈希MD5实现加密(python3.X)
  13. python获取扫描枪数据线_【转】C#中判断扫描枪输入与键盘输入
  14. **一些常用的字体英文名**
  15. 一款商城APP开发要多少钱?
  16. python提取cad中的文字_[python]提取PPT中的文字(包括图片中的文字)
  17. 传世藏书 医部目录(1-6册)
  18. Win系统下快速批量截图
  19. 偷天换日合约易主,地址变脸移花接木——底层函数误用漏洞 | 漏洞分析连载之四...
  20. 4G技术哪家强?说清楚FDD和TDD之间的事

热门文章

  1. 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布...
  2. 《贪心算法》— NYOJ 1309 冰法斗神龙
  3. ROS读取手机GPS数据(1)
  4. jquery 中加入html代码,jquery实现动态添加html代码
  5. java 权重随机数算法
  6. 装饰模式(Decorator模式)详解
  7. java判断指定路径文件夹是否存在,若不存在则创建新的文件夹,存在则删除
  8. 5G基础以及发展简介
  9. 浦发银行重庆分行信息科技岗校招面试
  10. alios thing 信号量_操作系统100问